Add a docker hypervisor

This is a quite simple hypervisor, and only supports linux flavours
currently.  Many things around inter-node communications will
probably not work.

The basic approach is we spin up a new image based on an upstream
one, add a sshd to it, tag the image with the name of the host and
then create a container from it.  This container should then be
usable as a system under test.

The implementation is largely based on both the existing Beaker::Vagrant
hypervisor, and docker-kitchen.
https://github.com/portertech/kitchen-docker All bugs are mine.

Still a few things to do around finding existing nodes, but for now
it makes basic enough images that you can run no tests in 11 seconds.

    $ cat docker-test.yml
    HOSTS:
      ubuntu-12-10:
        platform: ubuntu-12.10-x64
        image: ubuntu:12.10
        hypervisor: docker
    CONFIG:
       type: foss

```
$ time ruby -Ilib ./bin/beaker --hosts docker-test.yml   --no-debug
{
    "log_level": "info",
    "trace_limit": 10,
    "hosts_file": "docker-test.yml",
    "options_file": null,
    "type": "foss",
    "provision": true,
    "preserve_hosts": "never",
    "root_keys": false,
    "quiet": false,
    "xml": false,
    "color": true,
    "dry_run": false,
    "timeout": 300,
    "fail_mode": "slow",
    "timesync": false,
    "repo_proxy": false,
    "add_el_extras": false,
    "consoleport": 443,
    "pe_dir": "/opt/enterprise/dists",
    "pe_version_file": "LATEST",
    "pe_version_file_win": "LATEST-win",
    "dot_fog": "/Users/richardc/.fog",
    "ec2_yaml": "config/image_templates/ec2.yaml",
    "help": false,
    "ssh": {
        "config": false,
        "paranoid": false,
        "timeout": 300,
        "auth_methods": [
            "publickey"
        ],
        "port": 22,
        "forward_agent": true,
        "keys": [
            "/Users/richardc/.ssh/id_rsa"
        ],
        "user_known_hosts_file": "/Users/richardc/.ssh/known_hosts"
    },
    "HOSTS": {
        "ubuntu-12-10": {
            "roles": [
                "master"
            ],
            "platform": "ubuntu-12.10-x64",
            "image": "ubuntu:12.10",
            "hypervisor": "docker",
            "extra_commands": [
                "touch /tmp/foo"
            ]
        }
    },
    "helper": [],
    "load_path": [],
    "tests": [],
    "pre_suite": [],
    "post_suite": [],
    "install": [],
    "modules": [],
    "logger": "#<Beaker::Logger:0x007fbd9f087910>"
}
Beaker::Hypervisor, found some docker boxes to create
Provisioning docker
provisioning ubuntu-12-10

Setup: Update /etc/hosts on master with master's ip
Add Master entry to /etc/hosts
No tests to run for suite 'pre_suite'
No tests to run for suite 'tests'
No tests to run for suite 'post_suite'
Cleanup: cleaning up after successful run
Cleaning up docker
systest completed successfully, thanks.

real    0m11.892s
user    0m0.825s
sys     0m0.115s
```
Add openSUSE and SLES support to docker hypervisor.

On SUSE variants the package installer is called zypper, so add the
RUN statements to install the sshd in terms of zypper.

Additionally we need to explictly configure the sshd to allow root
login via passwords, bypassing pam.
Add a `docker_cmd` option to the docker hypervisor

This opens up the ability to have the docker container run something
closer to an init rather than a simple sshd.  This allows the
container to behave more like a system under test with fully working
service supervision.
Increase read/write timeouts in the docker hypervisor

This change increases the read and write timeouts to the docker api.
By default this is 60 seconds

Additionally we use the version assertion from docker-api so we
don't try and talk to an incompatible api version.
Install ssh clients in the docker hypervisor

Some docker base images are seriously stripped down and will not
include the ssh client packages.  These are normally where the scp
and sftp binaries live which are needed in later provisioning steps.
Refactor the flow of platform specific actions

The previous flow (using the return value from the case statement) was
needlessly complex and caused some confusion.  Refactor to add more explicit
appends to the dockerfile variable in each when block.
(maint) Wrap windows PE installation in `cmd /C`

When cygwin converts the posix-style commandline that bash provides to
a windows-style one for calling msiexec, it adds quotes around some
arguments. These quotes cause msiexec to fail. By wrapping the msiexec
invocation in `cmd /C`, we use the windows command interpreter to
handle the command line instead of bash/cygwin. This avoids the
translation issues introduced by cygwin.
(maint) Install PE on windows synchronously

Previously, beaker would call msiexec in a way that would cause it to
run asynchronously. This worked pretty much by chance, because beaker
did enough other stuff before trying to run puppet on the Windows
machine.

This wraps the msiexec call in `start /w`, which waits for the
installation to finish before continuing. This ensures that puppet is
fully installed before beaker continues.
Merge pull request #185 from branan/use_cmd_for_msiexec

(maint) Wrap windows PE installation in `cmd /C`
create beaker 1.8.1 gem
Merge pull request #186 from anodelman/make-gem

create beaker 1.8.1 gem
(QENG-310) move various host configuration steps together

- remove utils directory, place contents in host_prebuild_steps.rb
- update specs to reflect where code was moved
- update hypervisor.rb to use default, pre-built steps

- addon: remove last reference to systest
Merge pull request #178 from anodelman/configuration-cleanup

(QENG-310) move various host configuration steps together
(maint) Add spec Tests for Empty Fusion Snapshots

Add three spec tests to exercise that invalid Fusion snapshots raise the
proper errors.
google cloud integration
add firewall to google default network for given project

- to ensure that pe ports are open
added retry for network failure errors
split out google compute related code to its own class

- tidy!
added yard documentation to google compute code + new platform class

- we like docs!
- i should do this more often!
- please don't check for grammar
create beaker 1.8.2 gem

- to include alteration of beaker configure/validate post-provisioning
  steps