Wmi query support

This adds basic WMI query support. The goal here was to provide a simple interface which allows for arbitrary queries to be run against WMI. Given the complexity of WMI, the goal here was just to bring back all the values as strings, so we don't keep track of types at all (otherwise we'd be polluting the interface with a lot of `VARIANT` crap that is just overkill).

Nested arrays are supported for values so long as they are string types, otherwise they're ignored for now. Arrays are serialised to string as well.

I also:
* Cleaned up a couple of comments.
* Refactored some stuff to prevent code duplication.
* Had an awesome cup of tea.

Feedback welcome. MSF pull request coming shortly.