Make processors accept *paths* to files, not IOs

Currently processors are accepting IOs and returning IOs. This is not
uniform, because they obviously accept a `Refile::File`, which responds
to `#download`, and all processors which work with paths need to
remember to download it.

And there is no cost that we're avoiding streaming it, because most
processors will have to download the file, and this gem will be used
mostly for images, which will *always* require processing (resizing)
before displaying. And this way we can also `#send_file` and provide
filename for users (prior to this commit these parameters weren't used).
Don't accept a generic IO objects, only real IOs

We don't have any benefit from accepting generic IO objects which
respond to certain methods. If we only accept real IOs, then we can use
`IO.copy_stream`.

When working with paths, `IO.copy_stream` has the same performance as
simple `cp`. However, it's around 1.5x more performant than manual
`#read` & `#write`, and uses effectively zero memory (around 50x less
than the current solution).
Improve downloading and make Refile::File an IO

Instead of using the API from aws-sdk, we're using simple `#open` from
open-uri, and trust that it will download the file in the best way
possible.

In Refile::File we can now use `IO.copy_stream`, since we're dealing
with real IO objects. Since `#io` is now a real IO, we simply delegate
all unkown methods to it.