Resolve #63 - Implement caching for GetHashCode on entties

This change means that the hash code generated for an entity can never
change during the lifetime of the object.
Resolve #57 - Fix bug in EventBoundSetWrapper

The issue was that the set wrapper implemented the generic ISet<T> but not the
non-generic version (which ISet<T> does not itself implement, as assumed).