Private Repository Support

Added:

  - Ability to specify both Authenticated and Unauthenticated private Docker repository
  - fix if container doesn't have HTTPS support in apt
  - Added custom image tags if user doesn't want to use git hashes for tagging
  - Ability to *not* overrride current `latest` tag in the repo if so desired
  - Test cases for new features
We could just standardize on a `repo_name` that defaults to `username` if unset in yaml, otherwise you can use a different username/repo-name to push too e.g.

```
publish:
  docker:
    ...
    registry_host: docker.example.com
    image_name: image
    repo_name: company
    username: user
    ....
```
This would produce an image called `company:image` and push it using `user`. Alternatively, if `repo_name` is empty it'll just create `user:image`. I'll have to make it invalid to specify `repo_name` *and* `registry_host`, because you can't have named repo's on private registries as far as I'm aware (correct me if I'm wrong).