Accept ECDSA keys in keys:add

Fixes #1262
Add tests for ECDSA keys
fix(controller/scheduler): only announce 'web' and 'cmd' processes

Currently the nginx routers gets announced all types of processes.
This causes problems as both non-web and web processes are mixed
together by the router. The router should only be serving 'web'
processes for buildpacks or 'cmd' processes for dockerfiles.

This fix stops announcing any processes that does not have '.web'
or '.cmd'.

closes #1256
fix(scheduler/coreos): correct announce container logic for process types

Previously, the logger and proctype comparison logic were incorrect.
fix(scheduler/coreos): have announcer fail if it cannot get a port

Instead of publishing an invalid upstream for the router to use,
we simply check if the port is nil and exit.
Merge pull request #1263 from public/ecdsa-keys

Accept ECDSA keys in keys:add
Merge pull request #1269 from deis/1251-fix_portless_apps

fix(scheduler/coreos): fix apps announcing themselves with no port
fix(travis-ci): update logger makefile target to "test-unit"

The "make test" target in logger now runs functional tests as well,
requiring Docker. This was not the intention at Travis-ci.org, where
we want just unit tests.
Merge pull request #1274 from deis/fix-travis

fix(travis-ci): update logger makefile target to "test-unit"
fix(scheduler/coreos): skip announcer containers for start, stop, destroy

With #1269 we stopped creating announce containers except for web and cmd
types, but we still attempt to perform actions on them for start, stop,
and destroy. This commit adds logic to wrap all of these scheduler actions
in a conditional which skips (and logs) announce operations.

TESTING: rebuild the controller
```console
$ make -C controller stop build start
```

Then, deploy an application which has either a cmd or web proctype, as
well as a non-standard type. I modified the Procfile for our
example-ruby-sinatra like so:

```
web: bundle exec ruby web.rb -p ${PORT:-5000}
clock: echo flava flavvvvvvv
```

Scale the app, start/stop processes, etc. You should see successful
operations for both, and note that the clock type has no announce
containers. The output of ```deis ps``` should always show them
as being up:

```
=== exotic-icehouse Processes

--- web:
web.1 up (v3)
web.2 up (v3)
web.3 up (v3)

--- clock:
clock.1 up (v3)
clock.2 up (v3)
clock.3 up (v3)
```

fixes #1273
closes #1275
Merge pull request #1279 from deis/1275_skip_announcers

fix(scheduler/coreos): skip announcer containers for start, stop, destroy
feat(*): move data containers into new unit files

Moving these containers into their own data files
sets the stage for locking data containers to specific
machines. This also enables us to stop Postgres cleanly on
the database-data container.

closes #638
fix(controller): format command before creating container

The self._command_announceable() check was called inline with code
that formatted the container's command, so no announcer would be
created since the command showed up as "start {c_type}" literally.
The _command property is only referenced in this code.
fix(*): schedule data containers to specific machines

Currently, whenever database, logger, registry, or builder are rescheduled
by fleet, their data container is left on the original machine. The effect
for the user is that they lose their data! This commit schedules data containers
to a preselected machine. If that machine goes down, the underlying service will
go down, but this is preferred to scheduling it on another host that won't have
the data.

Note that this is an interim fix - stateful data should be stored off-host.

closes #1038
test(controller): add regression test for "start {c_type}" bug
Merge pull request #1107 from deis/1038-static_data_containers

fix(*): schedule data containers to specific machines
Merge pull request #1285 from deis/hotfix-app-announcers

fix(controller): format command before creating container