add ItemScrollView class as prerequisite for displaying a list of moves
new icon resources for navigating the history of moves
add first version of GoMoveModel

change details
- GoMoveModel supports array-like access to GoMove objects
- GoGame now delegates GoMove handling to GoMoveModel
- GoMove objects are now owned by GoMoveModel instead of
  by their successor (next property); this simplifies the ownership
  model
- Rename notification goGameLastMoveChanged to
  goMoveModelChanged
- Remove notification goGameFirstMoveChanged
- NSCoding version bumped because GoMoveModel is now
  serialized as well
- Remove undo functionality from Play view and GoGame (and
  various other places where "undo" is referenced)
- Display "one move forward" and "one move back" buttons
  in Play view toolbar (no functionality yet)
refactoring: placing a stone is now done in GoMove doIt()

change details
- GoMove setPoint:() previously did two things: Assign a new
  value to the point property, and place the stone
- Stone placement has now been refactored into a separate
  method doIt(), which is the counterpart of undo()
- GoMoveModel now invokes doIt() when a new GoMove object
  is added to the model for the first time. This balances the discard
  methods which invoke undo() when a GoMove object leaves the
  model.
simple back/forward navigation of move history
add discardFutureMovesAlert and playOnComputersTurnAlert

change details
- add registration domain defaults
- bump user defaults version + add upgrade
  method to UserDefaultsUpdater
- add support for reading/writing user defaults to
  BoardPositionModel
- add GUI for changing user preferences
- display alerts as appropriate
- enable/disable panning as appropriate
- update TESTING document
Play view objects now listen for playViewBoardPositionChanged instead of goMoveModelChanged
GoMoveModel no longer invokes GoMove objects' doIt() and undo()

change details
- this commit reverts some of the changes made in 243a1e6
- GoMove's doIt() and undo() depend on the current board
  position to work correctly
- because GoMoveModel has no idea about board
  positions, the responsibility for invoking doIt() and undo()
  cannot be assigned to GoMoveModel
user can now make a move while viewing previous board positions
new icon for "continue" button to distinguish it from the "forward" button
viewing old board positions is now possible in computer vs. computer games
extract board position handling from BoardPositionModel to new class GoBoardPosition

change details
- motivation of this refactoring: the board position is closely linked
  to the state of GoPoint/GoBoardRegion objects, so it makes
  much more sense to keep that information in an object that lives
  and dies with the GoGame instance
- GoBoardPosition now uses KVO to observe changes in
  GoMoveModel (as opposed to BoardPositionModel, which used
  the goMoveModelChanged notification) so that it is possible to
  have several GoGame object clusters exist at the same time
  without interfering with each other
- For the same reason, observers of GoBoardPosition must now
  use KVO instead of the playViewBoardPositionChanged
  notification
- side-effect change: the goGameWillCreate notification now
  carries the old GoGame object with it
status line now displays "passed" when viewing old board positions
GoScore now uses a better way to to take the current board position into account

change details
- the previous implementation happened to work correctly
  because GoMove's undo method severs the double-link
  between previous/next GoMove objects
- the new implementation now uses the current GoMove
  object obtained from GoBoardPosition as the boundary
  for the GoMove iteration; this is less fragile (if something
  in undo changes) and, because the boundary is more
  explicit, makes for code that is more understandable
refactor PlayViewController: delegate gesture handling to subcontrollers
refactor PlayViewController: delegate toolbar management to subcontroller
use associative reference instead of a property to store DiscardAndPlayCommand
ItemScrollView improvements

- add public reloadData()
- bugfix: properly reset scroll position on reloadData()
- bugfix: use setNeedsLayout() instead of setNeedsDisplay()
- split data source method itemWidthOrHeightInItemScrollView:()
add methods for drawing rects and circles to UiUtilities
PlayView exposes board frame property

- the property allows clients (specifically PlayViewController) to
  set up other views so that they are nicely aligned with the board
- the property must already have the right value when it is time
  for PlayViewController to set up its views; this requires that
  PlayView creates the PlayViewMetrics object much earlier
- this is not a problem because the boardFrame property can be
  calculated without a GoGame