Add windows userdata

* refactor cloudinit packages to include support for windows userdata
* fix NewMachineConfig to store corect paths when on windows
* removed dependency on 7zip (python distribution installed by cloudbase-init has the tarfile module)

PR summary
==========

This pull request refactors the way userdata gets generated. It adds an interface to replace the cloudinit.Configure(), ConfigureBasic() and ConfigureJuju() bits. It also adds an interface to do platform specific rendering of path creation and file creation.

As a result of the new interface approach, there is a need to know the series for which we are rendering the cloudinit config before we reach ConfigureJuju. Because of this need, the Tools field either has to be populated in NewMachineConfig, or a new Series field needs to be added at that time. Given that the provisioner already knows this information when calling NewMachineConfig(), I see no reason to throw away this information and rely on a second structure, that is populated later (Tools) to determine the series (I am open to suggestions though). 


Internally, Go uses the '/' on all platforms. So when doing a:

```go
ioutil.WriteFile("C:/Hello.txt", []byte("World"), 0777)
```

On windows, it will work without a problem. However, when sending such paths to cmd.exe, all sorts of fun things happen. As such, paths.LogDir(), paths.DataDir(). will return ```C:/Juju/log``` and ```C:/Juju/lib/juju```. Only when passed through the renderer does it become a valid path for cmd.

That is also why PathJoin was written this way. To convert paths that have as a base a valid path in Go, but not a valid path in cmd.exe. (not sure if I'm making enough sense :) )