Slightly reorder Puzzle methods
Add dir.reflect method

TODO reuse the dir.* arrays instead of returning new ones
Split off getFarthestValidCellInDirection from getClueNumberForCell

One could refactor getCursorRanges to use getFarthestValidCellInDirection