MoveFinder now caches its result and only regenerates new valid moves when the
cache is invalidated.
Merge branch 'cachedlegalmoves' into islands_30