removed usage of Predicate<>
added GetValueOrDefault extension
modified FuncEqualityComparer to use a static method to avoid requiring filling in generics every call
returned static hashcode from equality comparer so that the function is always executed.  added unit test to verify correctness