Fix for #1448 - ViewComponents must be public top-level classes

ViewComponents and Controllers now follow the same rules exactly for what
types of classes they can be.

Also corrected a bug in a test for controllers. Closed-generic types can
be controllers, the test was wrong.
This was the bug in the test. The type name of `OpenGenericController<string>` at runtime will be something like `OpenGenericController'1`, which doesn't have a 'Controller' suffix. Adding a base class here makes it work.