Tag helpers registration system

- This registration system accepts tag descriptors that it then uses to feed requests for tag helpers.
- Added some infrastructure pieces that are used to build up valid tag helper descriptors.

#70
- why is the `Action` required to have the correct `CSharpCodeWriter` in its closure?  could it instead be `Action<CSharpCodeWriter>` and called appropriately here?
- the `Action` appears to be responsible for conversion to a `string` and escaping e.g. ensure the `string` value doesn't contain double-quotes.  so why isn't it also responsible for the surrounding single or double-quotes?
- the `Action`'s name implies we can't handle multiple constructor parameters.  if it's "allowed" to generate a comma-separated list of arguments to the constructor, needs a better name e.g. `renderConstructorParameters`
- nit: does the `Action` render or generate?