Add Restore Mode to stop api calls while restoring

The main goal of this PR is to prevent data loss
during the different steps of the restore process.
This will be used by restore once it lands.
This is the basic required functionality for this
API server mode.
Following a feaure implemented for Upgrade, an
api root server that can selectively allow API
commands depending on the Restore step we are
running.
When we are preparing a restore: that includes
uploading files if required for instance, the
API will only accept Client.Restore to be
triggered in order to avoid data loss when the
restore runs.
When Restore is running no calls will be allowed
since state server will be down.
Core changes to store tools in state
Search, download and cache tools from public/configured tools sources

FindTools will now search simplestreams unless an exact match is
being performed and that is found in toolstorage. Tools found in
toolstorage will take precedence over those in simplestreams.

If a tools version is requested for download and it is not in
toolstorage already, the API server will search for it in simplestreams,
download it, and cache it in toolstorage before returning it to
the client.

Also, we now once again (as in 1.20) only clone tools on upload if
requested. We will drop the "AddToolsAlias" function from toolstorage.
cmd/jujud: clone tools, don't alias metadata
Fix apiserver tools serving
Fix tests
cmd/jujud: read tools into memory before adding to storage
s/ToolsStorager/ToolsStorageGetter/g
state/toolstorage: remove AddToolsAlias

We're no longer aliasing, just adding cloned
tarballs for each version, which will be
de-duplicated by managed storage. This will
simplify the removal of old tarballs from
storage.
UnShareEnvirionment

Add a new client-side API function: UnShareEnvironment which denies
the given environment user access to the environment.
apiserver/common: address review comments

- Fix comments
- Bail early if AllMetadata returns an error
- Improve FindTools (API server) coverage
apiserver: improve tools download test coverage
Call SetAPIHostPorts in JujuConnSuite

Various tests now need API host ports to
be set in State so they can construct
tools URLs.
Address review comments
Merge pull request #700 from axw/state-tools-take2

Store tools in GridFS, metadata in state

When bootstrapping, tools will be stored in GridFS.
If the tools were uploaded, they will be "exploded"
into each of the series of the same OS. Otherwise,
only the specific binary version that was downloaded
from the external tools source.

When a user searches for tools (FindTools API), then
the API server will search both in state/gridfs and
in external simplestreams sources. If an exact match
is specified and it is found in state/gridfs, then
the simplestreams search will be excluded.

When a user requests a tools tarball, then the API
server will first attempt to retrieve them from gridfs.
If the tools are not available in gridfs, then the
API server will search simplestreams, download the
tools, and cache them in gridfs before returning them
to the user.
Add a DB dumper abstraction for mongo.
Clean up the legacy backup tests.
Test root.tar as well.
Refactor the legacy Backup function to be more suited toward use in a backups API.
Get rid of the legacy Backup function.