Here's the initial release. Functional but there's room for improvement.
- Employs generics to ensure that the objects are homogenous.
- Requires that the callers supply one hash method other than GetHashCode().
- Works for input sets smaller than int.maxValue/2. When passing a capacity greater than that it miscalculates the best k and n values.