Expose IDefaultValueProvider

I've added the ability for users to define their own default value strategy without affecting the external interface. There should be no braking changes, just update and recompile. I wanted to rename a few properties to better reflect their function but decided to stick with not braking the API.

This will be great for things like http://github.com/AutoFixture/AutoFixture where the defaults can be set to reasonable random values.

Let me know what you think?