Member access and invocation abstraction via PSObject

The new capabilities of PSObject are now used to access properties,
fields and methods of any object by abstracting the access through
PSObject.
The current implementation lacks support for static members and will
be added in the next commit.
This means the new tests are all working, but some old aren't with
this commit.