Refactor pipeline to separate registration time from running time.

Refactor registration API to use a bootstrap
Added end user configuration story
A few unit tests
Updated existing registration to use new API
That's right generics are special
Fixing unit tests
Merge branch 'develop' into PipelineRegistration
Made all behaviors and a few more class internal
Fixing format
Made all DisposeManaged() privates

Made most PipelineExecutor class internal
internalise MTATaskScheduler
internalise MTATaskScheduler
move generichost into into host exe

fixes #1955
remove guards in BehaviorRegistrations.Register

since they are internal
remove redundant field
Features now accepts the Configure object
Settings are now non static and available on config
Cleanup of the features
Adding support for feature dependencies
Adding configuration hooks for UsePersistence<T>