Check for object identity before equality, since it's cheap and provides a huge performance boost.
In-progress work on caching the hashcode for CharSet -- committing the code (it doesn't build) as a repro case for a very strange F# compiler error (bug?).
Fixed the computation of the CharSet hashcode by manually inlining the CombineHash function.