Replace the legacy backups implementation with a new one.

The new implementation is refactored to fit to the new backups approach of storing the backups in env storage (along with metadata in mongo). This is the final large patch in the backup series (the remaining ones are much smaller).

The next 2 patches in the series:
https://github.com/ericsnowcurrently/juju/pull/3
https://github.com/ericsnowcurrently/juju/pull/4
So, I stil think this is an anti-pattern.  If there's an error statting the file, for example, you don't close the file.  I didn't understand your comment about the file not having a filename.  Obviously there's a filename.  You're opening it.  And I didn't understand about the caller having to clean up the filename.  I really don't see any reason why the caller can't open the file from the filename that you return it, that way it can close it as well.