Support reading/writing environment variables using $env

Implemented support for:

    $env:userprofile
    $env:MyVariable = "MyValue"
Support getting child items of Env: drive.

The following commands now return all environment variables:

    dir env:
    dir env:\
    Get-ChildItem env:
    Get-ChildItem env:\
Support individual environment variables from Env: drive.

The following commands now return an environment variable:

    dir env:userprofile
    dir env:\userprofile
    Get-ChildItem env:userprofile
    Get-ChildItem env:\userprofile
Environment variables can now be selected after changing to Env drive.

Support the following:

    cd env:
    dir userprofile
Merge pull request #222 from mrward/environment-provider

Fixed some parts of the Environment provider
Add cmdlet Split-Path and tests
Path cmdLet tests no Platform
Merge pull request #223 from darth-walsh/splitpath

Split-Path cmdlet
Renamed PS reference test project to reflect brand correctly
Refactoring: Moved SetUp and TearDown methods to RefererenceTestBase
Moved ReferenceTestInfo to the correct directory.
Merge pull request #199 from sburnicki/rename_reftests

Renamed PS reference test project to reflect brand correctly
Refactoring and fixing of Get-Member cmdlet
Implementation of Select-Object cmdlet

The implementation supports everything but the ExpandProperty parameter.
Also, there can't be hashtables in the property parameter, yet, as hashtables
are currently not handled correctly by Pash (they get enumerated, but shouldn't).
Better support for Hashtables/Enumeratables

LanguagePrimitives provide a unique way to access an enumerable/enumerator.
Therefore all the (nearly identical) implementations in different classes could be
removed.

One important change is that only IList are seen as enumerables. For most objects as
arrays and lists, Pashs behavior won't change. But strings, Dictionaries, Hashatbles,
etc. have to be enumerated explicitly (via .GetEnumerator()). This matches Powershell's
behavior and allows Hashtables to be used in cmdlets dircetly, without being enumerated
to DictionaryEntries.

Last but not least, the FormatManager had to be adjusted to enumerate *all* objects, not
only ILists, so also Dictionaries are formatted correctly.
Unrolly one level of an input object while formatting also matches PS behavior.
New tests validating the new behavior and cmdlet
Added tests. Proper hashtables: values are actual objects, not wrapped
Changed the enumeration behavior; Simplified tests

Obviously it was a bad idea to only enumerate ILists. That's why I changed it
back s.t. everything is enumerated but strings and IDictionaries which seems
to fit PS' behavior better.
The previously added tests (which didn't work before) make sure enumerables
are enumerated while dictionaries and Hashtables aren't.

Also the Formatting tests were simplified. The tests depended on a concrete
order of the object's properties. However, the real order is abritrary, so
the tests are more robust
Fix for null comparison
Merge pull request #224 from sburnicki/psobject_cmdlets

Get-Member fix; Introduction of Select-Object cmdlet; Refactoring