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).
I don't think that exactly correct Serdar.  Lets look at the following array of Resources:

`[File1, Custom1, File2]`

When the ResourceCollection is initialized and the first resource is executed, `@insert_after_idx = 0`.  Then we execute `Custom1` which sets to `@insert_after_idx = 1`.  `Custom1` is an LWRP with 3 resource inside it.    They get added to the ResourceCollection using `insert` and the `@insert_after_idx` pointer is updated each time.  The ResourceCollection now looks like:

`[File1, Custom1, Service1, Service2, Service3, File2]`

The `iterator` is what keeps track of executed and non-executed resources.  Once `Custom1` is finished executing, the interator points the Runner to `Service` and the `@insert_after_idx` pointer is reset to 2.  Now if `Service1` is also an LWRP then it will get expanded and its resources inserted correctly:

`[File1, Custom1, Service1, Service1.1, Service1.2, Service2, Service3, File2]`

Am I understanding that correctly, @sersut @jkeiser