Don't unload constants defined in parents when loading dependencies

Also, add some additional logging, and refactor the code so
that remove calls remove_feature.

Fix the specs to check that the number of log entries actually match
what is expected.
Allow specifying constants to remove via a block to require, instead of using ObjectSpace

When used, this dramatically speeds up startup of applications that
require a large number of files.
Fix spec descriptions
Log when attempting to remove a constant that doesn't exist
Ignore anonymous classes/modules

You can't remove an anonymous class or module based on the name,
so just ignore them.  This doesn't really change behavior, as
errors removed constants are rescued, but it does stop the entries
from being logged.