Added IMetadataProvider so attributes can provide their own metadata

Any MetadataAttribute which also implements IMetadataProvider will have
its GetMetadata method called to create its metadata rather than having
its properties scanned.
Added tests for the IMetadataProvider
Merge pull request #519 from kcuzner/attributed-multivalue

Attributed Metadata allowing overriding of metadata creation via an IMetadataProvider interface on metadata attributes