feat(dockerfile): improve dockerfile and procfile workflow

- add SHA, Procfile and Dockerfile to Build model (if available)
- fix operator precedence bug from deis/deis#890
- add container type check before scale operations (fixes #496)
- add uniqueness constraint check on container type/num
- use SHA in release summary if available
- auto-scale web=1 for heroku workflow, cmd=1 for docker workflow
- add tests for heroku and docker workflows, plus test for invalid process types
feat(builder): update builder to pass SHA/Procfile/Dockerfile (if available)
fix(announcer): detect first exposed port instead of hardcoding to 5000/tcp
fix(schema): remove uniqueness constraint on containers
fix(controller): only scale web=1 if procfile has web entry
fix(scale): move initial scaling logic to model, add tests
fix(migration): squash migrations, add newline
fix(builder): include default_process_types from .release
fix(deploy): rework initial deploy logic based on workflow
fix(flake8): resolve code formatting issues
fix(tests): close db connections during threaded execution

This appears to resolve https://code.djangoproject.com/ticket/22420
allowing us to get test coverage for threads executed within
TransactionTestCases.
docs(developer): flesh out developer docs
fix(scheduler): detect exposed ports from image for PORT envvar
feat(controller): Toggle registration using etcd

Allow to disable or enable the registration using
an etcd setting.
Merge pull request #977 from johanneswuerbach/etcd-register

feat(controller): Toggle registration using etcd
Merge pull request #967 from deis/dockerfile-workflow

Improve Dockerfile and Procfile workflows
feat(controller): add Domain model

This is added in the API with 2 new URLS

GET /apps/{app}/domains to retrieve the list of the domains
POST /apps/{app}/domains/{domain} to create a new domain.

The CLI is adapted to make use of this new API.
hook up domains to router
fix(confd): give controller/router /deis access

Both components require access to /deis/domains, which holds the
keys for all application domains. Since /deis/domains does not
exist at first boot, confd will complain that /deis/domains
does not exist as a key if you supply it to the keys list. Since
the /deis key always exists, setting the keyspace one level lower
fixes this issue.
style(router): add newline