Implement deployments with pods

Refactor the deployment mechanism to be exclusively pod based. Refactor
the deployment API accordingly. Improve test coverage, and provide the
foundational support for implementing more built-in deployment strategies.
I'm now wondering if we should be using the Deployment UID instead of the name