Introduced scope class to change architecture to support scopes

Pash's architecture had no support for scopes. Instead, there was just
one global scope. These changes are the start of scope implementation.

While the "global scope" bahvior isn't changed, yet, the architecture
is changed to support scopes in regard to variables and drives.
The new class, SessionStateScope, is the new heart of a SessionState
and is intended to support nested scopes. The SessionStateGlobal class
is intended to care about the not-scope related things as providers.
An important change is that SessionStates aren't simple copy-objects
that are created every now and then, but only if it's really necessary.

There are further steps that need to be done to fully support scopes:

* While VariableIntrinsics and DriveManagementIntrinsics already implement
  the new scope behavior, the alias and function scope support still has
  to be added.

* Once this is completed, the creation of SessionStates has to be adjusted even
  more in order to correctly create new scopes.

* The existing cmdlets (new-variable, etc) need to be re-written to better
  support scopes, read-only flags, etc.

* There should be some refactoring of existing code. SessionState should
  be used as a central object to modify the sessions data.
Merge pull request #176 from sburnicki/scopes

Introduction of scopes