fix(controller): deploy only when Build is present

In terms of 12 factor's best practices, a build and configuration is a
release. Currently, we create and deploy a new release with any change
to an application published a release. This is because we create an
initial build on app creation. With this change, no build is created on
app creation, and the first release is published to the scheduler once
the release has a build.

Other notable changes:

 - the release's image field has been removed in favour of an app's ID +
   the release's version
 - lots of the view logic has been refactored into the models
 - build and config are mandatory in Release.new

Making Build and Config mandatory in Release.new had to happen as Builds
can be nil, which caused bugs when trying to roll back to a previous
release with a nil Build. Release.rollback would call Release.new with
an older build's release info, which sometimes had a nil Build. Because
of how Release.new worked, Release.new would use it's own current Build
in the new release if the supplied build was nil, causing unintentional
behaviour.
Merge pull request #2159 from bacongobbler/premature_deploy

fix(controller): deploy only when Build is present