Add environment lock/unlock/locked handling

This PR adds support for `deploy:lock` and `deploy:unlock` tasks.

These tasks are intercepted and handled separate from any provider.

When an attempt to deploy to a locked environment is made, we'll send up an error deployment status with a description including who locked the environment.

Addresses #55 
> Here's we're setting setting .testing to true so Deployment::Status will store payloads in a .deliveries

Do you think it'd be more useful for us to have something like `Heaven.testing?` so we won't need to reimplement this on each model that may need to modify behavior under test?