provision: change Deploy method

Now it receives the version, that will tell the provisioner which
version of the app should be deployed. An example of version is the hash
of Git commit, when deploying with Git (currently, the only supported
deploy tool).

As a bonus, it also facilitates rolling back applications.

Related to #458.
testing: fix Deploy implementation in the FakeProvisioner

FakeProvisioner needs some love :-)

Related to #458.
testing: add some documentation for the FakeProvisioner
testing: refactor FakeProvisioner

Introducing the provisionedApp type. This type now groups all the
information about the app, like restarts, dependencies installation,
units, cname, etc.

There is still space for improvements, provisionedApp can itself
implement the provision.App interface.
testing: check that the app is provisioned before restarting it
testing: check that the app is provisioned before installing deps
testing: improve FakeProvisioner's SetCName implementation

Two improvements:

	1. support for prepared failures
	2. refuse non-provisioned apps
testing: improve FakeProvisioner's UnsetCName implementation

Same as 448b8840fc71fa5ace524ce07428512f4527eee1.
app: fix tests to match the new behavior of the FakeProvisioner

* The method FindApp does not exist anymore, using Provisioned instead
* Restart and SetCName now fail when the app is not provisioned
api: fix tests related to recent FakeProvisioner changes
api: fix cloneRepository handler

For now, just pass "master" as the version. The goal here is to keep
compatibility while I accommodate the API changes.
provision/lxc: "fix" Deploy method

Just adding the parameter, for now. The implementation comes next.
Trying to fix the build first.
provision/docker: fix Deploy signature
provision/juju: fix Deploy signature