Notify a resource by the `resource[name]` key it was written as

ResourceCollection currently fills 2 functions - it keeps an ordered list of resources to converge during the 2nd Chef phase, and it keeps a unique set of known resources keyed by the resource type and name (IE, `package[vim]`).

As part of fixing https://github.com/opscode/chef/issues/1817 I am attempting to seperate ResourceCollection into two classes that encompass the different purposes.  ResourceCollection is now a thin proxy in front of these two classes to keep backwards compatibility.

**EDIT**

I am keeping all backwards compatibility for ResourceCollection.  The implementation details still utilize 2 classes for the 2 purposes.  I also made the changes to support notifying resources by the key they were written with (which was the original problem).
they should still be accessors, they can be private accessors if you like.  the problem with ivars is that using `@megatypo` will autovivify a megatypo ivar, while `megatypo` will throw a no method error.  generally in ruby readers should always be used.  setters are more difficult since you have to use `self.setter = whatever` because `setter = whatever` will create a variable with local scope instead of hitting the method so you usually see `@setter = whatever` in initialize methods (and of course in an explicit setter itself, because of inception..).  if there's no explicit setter then usually the ivar is better to use because `self.setter = whatever` is just a little unwieldy.  i've still seen bugs where the initialize method using an ivar directly has bypassed the type checking in the explicit setter for chef resources and that has trolled us.