Adding support for ModelMetadataAttribute in core.

This change introduces ModelBinderAttribute which can be used to specify a specific IModelBinder type or a specific IModelBinderProvider type. The attribute can also be used to provide a ModelNamePrefix. The attribute is allowed on types as well as parameters.
The "new" ModelBinderAttribute behaves in all respects like webapi except one. 

- There is no ```SuppressPrefixCheck``` property on the attribute in the current implementation. The rationale for this is as follows : 
```SuppressPrefixCheck``` is Only applicable for the following case ( no binderType specified on parameter but a binder type of ModelBinder on the type.
```c#
// Notice no type is provided on the parameter's ModelBinder attribute.
void Action([ModelBinder] Person p);

// SuppressPrefixCheck only works if the binder type specified is of type IModelBinder 
// (and not IModelBinderProvider).
[ModelBinder(typeof(TestModelBinder), SuppresPrefixCheck=true)]
public class Person
{
}
```
What this results is before calling the ```TestModelBinder``` it will skip the check if there is a value provider which can provide a value.
IMHO this is a entirely unnecessary. @yishaigalatzer please share your thoughts.



We might want to consider `[FromModelBinder(...)]` or something similar for consistency.

There's also the issue of compat. In this PR we're removing `[ModelBinder]` from the WebAPI shim, which has a special semantic. `[ModelBinder]` in WebAPI is required to opt-in to model binding. Supporting a no-arg `[ModelBinder]` in the new framework seems wrong because it doesn't really mean anything.