Fix for #1192 - Support customizing reflected model through attributes

This adds support for attributes which interact with reflected model.
These conventions are applied after all of our built-in constructs so that
you can see and modify the results.
I don't really like the idea of using a generic to save typing. IMO it's goodness to have individual interfaces as a good place for targeted docs.

Also that would require us to define a *bottom* type for all of the reflected models to inherit, so that we can constrain `T`. Otherwise you could define an `IReflectedModelConvention<string>`. Since there's a bounded set of these types (3) just defining them longhand seems better.