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). 


I dunno -- I think that we should be able to express everything in either MachineConfig (for differences in how we want to set up the machine) or in the Renderer (for differences in how to express the MC's per platform). We've got a way to go before everything's properly untangled, it's true -- but I'm pretty sure that everything in the supplied cloudcfg could and should be expressible in the MC alone, and writable by the renderer. So I'm not so sure there's much value to additional granularity?