[Issue #730] Attribute Routing: Flesh out attributes

Added properties for order, name, constraints, default values and data tokens
to IRouteTemplateProvider and implementations on all the Http*Attributes.
Name and order are settable in those implementations, constraints, default values
and data tokens have a default virtual implementation that returns null.
This change also unseals the Http*Attributes so that they can be extended and
customized.

Added unit tests to validate the implementations for the IActionHttpMethodProvider
and IRouteTemplateProvider in the framework.

Added functional tests to cover extra attribute routing scenarios like a test for an
action with an HttpDeleteAttribute on it and action with AcceptVerbsAttribute and an
action with a custom HttpMergeAttribute implemented.
I am guessing your purposely left out tests related to route name?...curious to see how this works when both `Route` and verb attributes have name...example scenario:

I want to generate the following links and looking for something like below:

```
Link(routeName: "Customers", new{id=10}) -> api/customers/10
Link(routeName: "Customers_GetOrders", new{id=10}) -> api/customers/10/orders
```

Here will the route name on `HttpGet` attribute discard the one present on `Route` attribute?
```
[Route("api/customers/{id}", Name="Customers")]
public class CustomersController
{
   public IActionResult Get()
   public IActionResult Get(int id)
   public IActionResult Post(Customer)
   public IActionResult Put(int id, Customer)
   public IActionResult Delete(int id)

   [HttpGet("orders", Name="Customers_GetOrders")]
   public IActionResult GetOrders(int id)
}
```