Simplify a bunch of LINQ.
Memoize hashcodes for chains (performance improvement), warm the candidates cache with multiple starts (even though we only use single symbol start chains atm)