Improve Makefile recipes

The recipes are much smarter now, only stopping/starting containers
when required, using dependencies and arguments declared in
variables at the top of the makefile.