vagrant: pin devstack swift version

A patch recently committed to Swift
(034fae630cfd652093ef53164a7f9f43bde67336) completely broke ZeroCloud. I
don't know precisely the root cause; I found the bad commit by trail and
error.

This change pins devstack installations to a version of Swift just
before this "bad" patch.
Merge pull request #161 from larsbutler/vagrant-devstack-pin-swift

vagrant: pin devstack swift version
Fix a caching issue with SwiftPath object

By default, Swift uses JSON encoding for caching objects in memcached.

A recent bug fix (d4d088a2932406d925c5ff304eb8835678273351) made the
assumption that cached objects were pickleable. All of the tests passed,
but I observed this break in production.
See https://github.com/zerovm/zerocloud/issues/162 for details about the
error I observed.

In general, pickling should not be used for caching objects.
There is a reference to this in Swift commit
e1ff51c04554d51616d2845f92ab726cb0e5831a.

This patch switches to using JSON encoding for storing SwiftPath objects
in memcached.
proxyquery: factor post_job cluster_config loading

There are 3 general cases for loading the cluster_config:

- POSTed tarball
- POSTed system.map/JSON job description
- POSTed script with shebang header

In order to reduce the overall size of `post_job`, these three cases are
now factored out into a separate method for each.
Add gzip to allowed tar mime types

For all intents and purposes, application/x-gzip is a type allowed in
requests, but it wasn't actually part of the `TAR_MIMES` constant (a
list) along with tar, gtar, and ustar. Also, several places in the code
that check if a given mime type is in the TAR_MIMES were including gzip
_additionall_, on the fly. This is more complicated than it needs to be.
vagrant: add smoketests

These tests exercise all of the basic functionality of ZeroVM
application execution on ZeroCloud. This is useful to quickly test a dev
environment setup.
vagrant: pin devstack and keystone versions

This stuff changes and breaks the zerocloud environment too often. This
is an attempt at getting a stable environment for ZeroCloud and
application development.
vagrant: update README with smoketest instructions
Merge pull request #163 from larsbutler/memcached-encoding-fix

Fix a caching issue with SwiftPath object
Merge pull request #165 from larsbutler/smoketests

Smoketests for vagrant dev environment
Merge pull request #164 from larsbutler/factor-post_job

Factor `post_job`
Move ZvmNode from common to configparser
Clean up `json` module imports
ClusterConfigParser: clean up node collections

Both a list and a dict of the nodes were being maintained. This is
unnecessary.
ZvmNode: refactor _create_node

Instead of the standalone util function, _create_node is now a
classmethod of ZvmNode called `fromdict`.
proxyquery: remove commented-out code
proxyquery: add docstring to _make_exec_requests

It's a simple docstring; it just specifies the expected inputs and
outputs.
Merge pull request #166 from larsbutler/cleanup-ClusterConfigParser

Clean up ClusterConfigParser
proxyquery: factor source header processing

This block is now in a separate function, in order to reduce the overall
size and complexity of `post_job`.
proxyquery: rename cluster config loading funcs