Add functional tests, unit test improvements, fix accompanying bugs

Added tests and fixed bugs found while adding tests:

1. Stop trying to talk to wmi service in constructor -- moved to one-time init in query method that accesses WMI
2. Actually raise exceptions when queries are invalid or interaction with WMI fails -- was silently failing with nil results prior to that
3. Added remaining unit tests to exercise all methods.
4. Added functional tests to cover common cases
5. Cleaned up unit tests to some degree

Unit tests could still be refactored with a more thoughtful use of shared_examples -- way too much trying to force the DSL to work a certain way. Functional tests are better, but there is still some unneeded repetition. Resulting documentation of specs is decidedly non-human-like.