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
Instead of calling b.cleanup() in all the error cases, it's probably better to use a defer to do that.  if you name the return values of the function  builder  (builder *builder, err error) , you can do this here:

```go
defer func() {
    if err != nil {
        b.cleanup()
    }
}()
```