Adding Metadata conventions

This is an attempt to add the ability to override Metadata conventions as previously it was hard wired to DefaultMetadataModuleConventions.

You can now implement `IMetadataConvention` and implement it to how you want the system to find metadata modules.

This is the first attempt before we decide along with @liddellj how best to do this. 

Tests will fail but just wanted you to take a look at the propsed API