Update provisioning internals docs

 - Placement directives
 - Availability zone spread

Also, changed to use Markdown format.
Replace rsyslog for non-bootstrap agents

This PR uses a fork of the standard syslog package to stream logs directly to state machine rsyslog daemon

update tls config

* ensureCertificates now adds local IPs to subjectAltName. This allows clients to validate the server when connecting via IP
* fixed tls config passed to the client
Add state machine addresses
Replaced strings.Split() with net.SplitHostPorts()
Updated dependencise.tsv and separated tests

* Only the forwarder tests should be run on Windows
* updated dependencies.tsv to include the --nounixsocket fix on Windows
Add API func ShareEnvironment to client and server API:

ShareEnvironment shares the current environment with the given user.
Under the hood, it adds an environment user to state.
Remove unneeded removes
Added comment
Update the doc for backups and restore.
Clarify about the upload-and-restore case.
a -> is.
Explicitly indicate that root.tar does not include mongo-related files.
Clarify the role of --download and --upload.
Drop an unnecessary comment.
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.
When bootstrapping fails, jenv files are now cleaned up.
Fixes LP: #1365144 bug.

Signed-off-by: Jorge Niedbalski R <niedbalski@gmail.com>
Update Tools/FindTools APIs returned URLs

The upgrader, client and provisioner facades
have methods to find tools. Part of tools
is a URL, used to download the tools for
provisioning or upgrading an agent. We update
each of the facades to rewrite the tools URLs
to point at the API server.

Currently the API server will go off and
fetch the tools from provider storage. A
followup will change things so that the
API server hosts the tools itself, and serves
them out of GridFS.
AdminUserTag added to JujuConnSuite
Introduce state/toolstorage

state/toolstorage provides an interface, Storage,
for storing tools tarballs and metadata in state.
The tarballs are stored in GridFS, while the
metadata are stored in a Mongo collection.

State grows a single new method, ToolsStorage,
which constructs a toolstorage.StorageCloser.
The returned object will store tools metadata in
the "juju" database's "toolsmetadata" collection,
and the tarballs in the "blobstore" database.