(PUP-1044) Make FileBucket::File use a file when possible

This replaces the usage of binread of the entire file contents whenever possible (for computation of checksums, or for returning the size of the data).
@hlindberg There is a backwards compatibility issue with Ruby 1.8 when using IO::copy_stream.
Could you change this to use FileUtil::copy_stream instead?