Move code out of PuzzleManager to new Puzzle.getCursorRanges
Replace move with moveToCell and moveInDirection
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
Slight reordering in PuzzleManager
Implement shift+arrow and PuzzleManager.moveToFarthestValidCellInDirection
Implement home/end
Remove funny comments
No need to explicitly bind _loopGrid callback
Split isWhite from isValidSquare
Add reverse flag to _loopGrid
Add firstWhiteCell and lastWhiteCell fields to Puzzle

Make callback to _loopGrid return [r, c] when callback result is truthy
Implement command+up/down (Mac) and ctrl+home/end (Win)
Implement delete
Clarify moveForwards parameter of PuzzleManager.setCurrentSquare
Rename PuzzleManager.backspace to erase
Split setSquare from setCurrentSquare
Merge branch 'keys' into coffeescript-rewrite