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