Fix for issue #610 - Ignore internal and nested types

This change exludes internal and nested types from being treated as
controllers. This is consistent with MVC5's behavior.

DefaultActionSelectionConventions was primarily tested through running
action selection. I wanted to also test the methods with substantial logic
in this class, so I moved a spate of a classes from private classes inside of the
integration tests to public classes so they could be shared. I also added
tests to fill gaps in DefaultActionSelectionConventions, which is the vast
vast majority of this change.
@pranavkm I considered that also, and there are two reasons why I made the change.

1. The tests that use these classes are tests for `DefaultActionDiscoveryConventions` - which now **excludes** nested classes. So if they are nested classes, we have to modify the component under test to test it.

2. You run the same risk any time you modify test data in any way. It's just a broken concept. If someone were changing the behavior of `DefaultActionDiscoveryConventions` then you'd modify these classes (or the tests). If they are nested classes, you'd still need to modify them and you have to do it right just like you have to do it right if they are shared.

Better than that, the fact that they are shared means that you'd see the changes reflected in both the integration tests and the unit tests. If these classes start getting used other tests not related to action-discovery/adp-pipeline, then yeah, that's definitely evil :rage:.

Interested in more feedback and opinions here, any maybe better options if anyone can come up with something. Maybe the solution is to pare down the integration tests? Right now they are pretty much duplicating all of the test cases, I didn't change them because they were pre-existing.