refactor(controller): optimize layer creation

This restructures the Dockerfile in such a way that allows users to rebuild the
controller with minimal changes to the docker image's layers.
Of course you're right; my understanding of [`ADD`](http://docs.docker.com/reference/builder/) was wrong: "The first encountered ADD instruction will invalidate the cache for all following instructions from the 'Dockerfile' **if the contents of the context have changed**. This will also invalidate the cache for RUN instructions."
The proof is in the pudding:
```
Step 14 : ADD requirements.txt /app/requirements.txt
 ---> Using cache
 ---> da943219dc28
Step 15 : RUN pip install -r /app/requirements.txt
 ---> Using cache
 ---> c3494e8ef595
```