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