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 is the same pattern we use for the corresponding tests for controllers. I gathered feedback at that time and everyone was happy, so I'm not inclined to change it.