Break inheritance with ObjectCollection

Make TaskCollection not inherit from ObjectCollection. This removes
methods that TaskCollection never needs and makes TaskCollection work
more like the new style factory/registry classes. More duplication has
been introduced but will be removed in future work.
Clean up doc block for HelperCollection.
Remove dead code.
Extract base class out of subclasses.

* Remove the rampant duplication in the various registry classes.
  Extract a base class out of them.
* Change the name from 'Collection' to 'Registry'. The new subclasses do
  not fire events, and do not contain any iteration methods.
Add upgrade task for renaming collection class uses.
Rename variable/class references to collection classes.

Replace many collection based references with the real class changes.
Rename files to match their classes.
Fix failing test.
Finish moving method and remove static access.
Don't directly call magic methods.
Add missing tests for ComponentRegistry.

A test for loading aliased components was missing.
Use a template method to reduce duplicated code.

Make the various registries use a template method pattern. This reduces
the duplicated code between the various subclasses by keeping the
common parts in the abstract class, and the specializations in the
subclasses.
Improve docs and add reset() method.

Add a reset() method, while I don't think it will be widely useful it
could be helpful in testing situations and is simple to support and
maintain.
Clear bound events when calling reset().

Events will retain instances that should have been destroyed. Clear
bound events when emptying a registry.
Merge pull request #1457 from markstory/3.0-task-collection

3.0 task collection & refactoring