Adding Api Explorer

Adds ApiExplorer to MVC and some new plumbing through action descriptors to share arbitrary data.

ApiExplorer produces a set of `ApiDescription` objects for each action that is *visible*. 
- `ApiDescription` maps to a specific HTTP verb - or all verbs if there is no restriction
- There can be multiple per action based on routes and verbs
- Includes data about formatters, content-types, parameters

Visibility and Group Name for an `ApiDescription` can be configured right now using an attribute, and using reflected model. The default is *not visible*. Working on a fluent API for simplifying this process in startup, but it will come as a separate workitem.

There's a number of things are **are not** included in this work item
- Providing access to user-written doc comments
- Full implementation of the URL part
- Full implementation of the parameter part

ApiExplorer shares a number of implementation characteristics with the `ActionDescriptor` provider pipeline
- The collection of `ApiDescription` is cached, lazy and versioning
- `ApiDescription` objects are produced by an `INestedProvider<>` pipeline
- We only produce them for our *default* `ReflectedActionDescriptor` objects.

The other new thing that's here is an arbitrary metadata mechanism for data that's associated with an AD, but not used for any execution details. I did the same on the `ApiDescription` which has serious need for a *add your framework-specific data here* concept.
If there are *true* duplicates you'd get an ambiguity at runtime. From API explorer, it won't do anything harmful.

```
[HttpGet("Products")]
[HttpGet("Products")]
public Product GetAllProducts() { }
```

The workaround is to not do that :grinning: