Serve charm archives from the API server

Charm archives are now stored in the blobstore, and served over HTTPS.
The uniter client is modified to construct URLs using the API server URL.

We also introduce a new database-master upgrade step which migrates existing
charm archives from provider storage to environment storage. The final step
of the migration is to update the charm's document in state to record the
storage path.
it would be nice to have a different error message when removing duplicated charms vs other errors to aid the user in seeing what happened

cannot remove duplicated charm from storage
vs
cannot remove unsuccessfully uploaded charm from storage