Use a new, object-oriented approach to pydecking's internals...

Because it was starting to get hard being driven by the data structures all
over the place. Hopefully, this is cleaner, more understandable and
maintainable, and, ehem, testable. Yes, tests, those. They still need some more
work.
Test cluster attaching and add some improvements
Stop convering environment dict into string...

The docker client does that for us :-)
Add 'reverse_mapping' argument to util.undelimit_mapping()...

because we actually want our volume bindings with reversed key-values, because
it makes more sense a) with what we have to pass to docker, b) because it's
more likely that we'll change the local directory for a mount when we come to
update it with a group, rather than change the mount point and c) we might want
to bind a single local directory to many container mount points.
Remove unused util.delimit_mapping()
Stop '_attached' being an instance variable of a Cluster...

so that we could potentially run the threaded stuff twice without conflict. Not
that realistically we ever would, but it's the principle.
Pass Groups around correctly when performing operations
Fix runner building images
Add tests for container operations
Fix broken cluster attachment test...

We hadn't added the dependency to the cluster!
Add Image tests
Fix ignoring of Ctrl+C...

Turns out Queue.get() with no timeout cannot be interrupted by signals for some
Python implementation reason to do with locks. Adding a timeout makes it
function as expected.
Add cover/ to .gitignore
Unify and test image operations
Remove tests for old runner
Fix tests under Python 3
Merge branch 'objectify_all_the_things'

Refactor decking to make it more object-oriented. It makes testing operations
and navigating and maintaining the code easier!