[JCLOUDS-500] Initial commit for docker

Why do you do the `checkNotNull` then create an `Optional`? In fact, since this is a primitive, it cannot ever *be* null. If we want the null semantics, change to the following (and see also `memory`, plus `dns` and `hostname` which are strings, so *could* be null...)

```Java
public TemplateOptions cpuShares(@Nullable Integer cpuShares) {
    this.cpuShares = Optional.fromNullable(cpuShares);
    return this;
}