Stable Networking: Keep the same network settings during the entire container lifecycle.

This change will allocate network settings (IP and public ports) at container creation rather than start and keep them throughout the lifetime of the container (i.e. until it gets destroyed) instead of discarding them when the container is stopped.

It will also restore network settings upon daemon restart in order to guarantee that IPs and ports will remain stable all the time (regardless of daemon restarts) and will prevent new containers from obtaining the same IPs or public ports.
There is pretty nice trick to do something on error. At first you need named returned value `err error`, then you can do:
```
defer func() {
    if err != nil {
        ...cleanup stuff...
    }
}
```
And error in defer will be error which you returned from function.