add port mapping support + allow mapping to/from offered ports

This PR adds the `portMappings` field to `SingularityDockerInfo`, and allows for users to launch docker containers (via the docker executor, as opposed to a straight `docker run` command) mapped to ports allocated from the Mesos offer.

Example (works with our Vagrant rig):
```json
{
    "deploy": {
        "id": "11",
        "requestId": "nginx",
        "resources": {
            "cpus": 1,
            "memoryMb": 128,
            "numPorts": 1
        },
        "serviceBasePath": "/",
        "loadBalancerGroups": ["vagrant"],
        "containerInfo": {
            "type": "DOCKER",
            "docker": {
                "image": "registry.hub.docker.com/nginx:latest",
                "portMappings": [{"containerPort": 80, "hostPort": 0, "hostPortType": "FROM_OFFER"}]
            }
        }
    }
}
```

/cc @wsorenson @hgschmie @stevenschlansker 

/ccc @eliast -- you can probably utilize this in your re:invent demo
Is this best as an `Optional<List<>>`?  Would just an empty list suffice instead of an `Optional.absent()`?