Start building the InputRegistry.

Add an interface for ensuring some sanity to inputs, and add a hacky
implementation of a registry.
Start adding tests for InputRegistry.
Implement the InputInterface where it is needed.

This interface lets the framework have some certainty that userland
extensions will be compatible.
Implement remaining tests for InputRegistry.
Wire up the existing widgets to the registry.

Preconfigure the registry so other classes have less work to do.
Update tests to clear pre-baked configuration.
Fix incorrect class name.
Don't use reflection when it is not necessary.
Make default match typehint.
Merge pull request #2678 from markstory/3.0-widget-registry

3.0 widget registry