Moved fake manager creation and initial configuration into the proxy generator (Part I)

This is the first part of PR #372 (we split it up into 2 PRs as mentioned there).

It solves #371 partially, namely that the default behavior is available inside the c'tor call. Therefore it also solves the bug #368 (see the `when_faking_a_class_which_calls_virtual_property_members_in_constructor` test case).
`LazyInterceptionSinkProvider` with the factory delegate just exists because of the (currently) different naming of ILazyInterceptionSinkProvider and it's implementation LazyFakeManagerProvider.

The reason of `typeOfFake` being part of the factory has the following reasons: a) it *can* be part of the factory because we know this type already in the `FakeObjectCreator` (in contrast to the proxy object reference), so we remove the dependency to this `typeOfFake` from the interceptors, b) in the following PR, we need a second factory parameter, namely the fake options (to get the configuration options, see https://github.com/ulrichb/FakeItEasy/blob/feature/VirtualCallsInCtor/Source/FakeItEasy/Core/LazyFakeManagerProvider.cs), which indeed would be impractical to pass them trough till to the interceptors and c) we need a factory (delegate) for the provider anyways, because the provider is stateful (so it can't be a singleton service injected to `FakeObjectCreator`).