RefById and LazyId no longer hold their class as a constructor parameter

Two RefByIds are considered equal if they have the same ID and look up method. LookUpMethod is invariant in T, so the equality on the look up method can replace previous checks on clazz

This also introduces a little fake-currying, to make things syntactically easier even though RefById and LazyId have two type parameters (key and data type), e.g.:
LazyId(1)[Page]
in which the key type has been inferred from the constructor argument, but the data type has been specified in order to support an implicit search for the look up method.

There are effectively three notations for creating a LazyId
new LazyId(key, lookupMethod)
LazyId(key)[DataType]  // same as LazyId(key).apply[DataType] and LazyId(key).of[DataType]
LazyId.of[DataType](key)
RefFuture no longer implicitly defaults execution context to global. Ref.toFuture renamed Ref.toFutOpt, Ref.toFuture returns Future not Future[Option]