Remaining steps for IPv6 support

Most of the work for IPv6 has already been done; this adds support for using ip6tables, makes sure ipv6 support is enabled on the docker0 bridge, and skips the first IP even on IPv6 so we don't have to use a sub-range.
I agree, it's annoying.  NewChain is the object you are describing, I think, and it does embed Ipv6.  So if we're using Chains, we only pass ipv4/ipv6 in once.

Unfortunately, Raw is then exported, rather than everything going through Chain.  So we have to pass the ipv6 flag in here.

I did debate creating something like
```
func (c *Chain) Raw(args... string) ([]byte, error) {
return Raw(c.Ipv6, args)
}
```

Do you think that would help?

The bigger problem is the whole use of Raw in other packages.  I was going to clean up the whole use of Raw, but then the patch would have ballooned and been cross-purpose.