support for afero.Fs filesystem abstraction
using this library alongside code that uses afero has been very difficult, so I decided to just add support. it adds a dependency (afero), but now you can using this against various afero filesystem implementations. by default, it uses afero.OsFs so it behaves the same other than one thing: filesystem.Abs has been changed to just filesystem.Clean because there is no concept of working directory when working with abstraction filesystems.
i don't know whether to vendor this change and keep it to myself or if the added dependency and slight change in behavior is worth merging. but the option is here if nothing else as a reference for others needing to do the same.
[recreating to live on a non-master branch in my fork]