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.
at some point, we should get rid of using `Get*` in methods like this:

<cite>
There's nothing wrong with providing getters and setters yourself, and it's often appropriate to do so, but it's neither idiomatic nor necessary to put Get into the getter's name
</cite>