Refactor Entity type, move 'reference list' functionality away & add tests

This prepares us to tackle #41, the functionality to handle references within
collection types is really too large to include within the base Entity type.
Because of this, it has now been moved away to a new static type named
ReferenceList.

* Mark all reference-collection functionality on Entity as Obsolete.

* Add unit tests for event-bound list wrappers.
WIP #41 - Refactor object hierarchy for event bound collections

Issue #41 is all about wrapping generic ISet instances with the event-bound
wrapper system.  Because of this it makes sense to create a new base type for
event-bound collections that requires only the implementation of ICollection<T>
instead of IList<T>.  This base type can then provide functionality for both
lists, sets and any other collections we decide to add later.

* Move functionality to new base type.

* Mark IEventBoundList as obsolete - it brings no value to the API.

* Create new EventBoundCollectionWrapper type that handles ICollection
  instances.
Resolve #41 - Add reference set functionality

This adds the new EventBoundSetWrapper, a subclass of the abstract base
EventBoundCollectionWrapper type.  This handles all required functionality for
dealing with wrapped ISet instances.

* Add unit tests for new functionality.

* Add new ReferenceSet helper type to quickly wrap collections.

* Add new extension methods for sets.
Merge branch 'feature/41-event-bound-set'