zpm: remove Deployer class

Classes typically represent things -- they are normally named with
nouns to reflect this. The Deployer class was encapsulating a
behavior, the deployment of a zapp. This was reflected in the fact
that the class had just one public method, this was the class' sole
behavior. The state of the class was not very interesting.

The class thus behaved very much like a function. This is a very
direct translation of the class and its methods into a set of
functions.
zpm: inline single use _upload function

When adapting the tests, it was discovered that the previous mocking
was wrong. The zpm._prepare_upload function was mocked to return

  [('a', 'b'), ('c', 'd')]

even though this is an impossible return value for it -- the function
will always return tuples where the first element contains a '/'. This
is the slash that separates the container name from the object name.

This was not discovered earlier because zpm._uploads was mocked too in
the tests and so it ignored its arguments.
zpm: let _prepare_uploads return a generator instead of a list

Returning a list implies that we buffer the data we upload in memory.
Turning the function into a generator avoids this.
Merge pull request #136 from mgeisler/remove-deployer-class

Remove deployer class
deploy: only process .tmpl files as templates (fixes #132)

When deploying a zapp, we now only treat UI file ending in .tmpl as
Jinja2 templates. Other files are uploaded verbatim.

Testing with more than one UI file showed that we implictly depended
on the order of iteration over the set returned by _find_ui_uploads.
Sets are unordered, so the tests would fail. We now return a list
instead to get deterministic output.
Merge pull request #137 from mgeisler/jinja2-ui-templates

Only process .tmpl files as Jinja2 templates (fixes #132)
ignore: add MANIFEST file generated by distutils
tox: remove unnecessary basepython from doc env

The basepython setting specifies which Python to use when creating the
venv -- setting this to "python" is most likely just a no-op.
Merge pull request #138 from mgeisler/cleanups

Some small cleanups
templates/zerocloud.js: add missing semicolons
Merge pull request #143 from larsbutler/js-semicolons

templates/zerocloud: add missing semicolons