Improve performance and address review issues for #218

This commit rolls back the previous `GetHashCode` optimisations, because after further testing, they are not important enough to warrant the reduced readability. This improved readability in `RecursionGuard` and removed the previous change to `ListSpecification`.

This commit adds `NullableEnumRequestSpecification`, `ArrayRelay`, `CollectionRelay`, `DictionaryRelay`, and brings `EnumerableRelay` up-to-date with the style and performance warning code comment.