PlayViewMetrics refactoring, part 1: extract drawing functions

this is the first part of a series of refactorings whose ultimate goal
it is to make PlayViewMetrics into a proper model object.

we begin by removing all drawing functions from PlayViewMetrics and
instead place them into a new class aptly named PlayViewDrawingHelper.

at the same time, we move PlayViewMetrics to the "model" folder and
update the class docs to indicate PlayViewMetrics' new role.
PlayViewMetrics refactoring, part 2: become observer and observable

PlayViewMetrics now takes a more active role in that it 1) directly
observes other model objects whose properties have an influence on the
calculated view metrics, and 2) updates the metrics when those
properties change. In addition, PlayViewMetrics is now careful to change
the values of its key properties ("rect" and "boardSize") only after it
has calculated all the other view metrics. This allows clients to use
KVO on those key properties to get a notification when the view metrics
changes.

PlayView now is no longer responsible for triggering updates in
PlayViewMetrics. Instead, PlayView observes PlayViewMetrics, just as it
does with other model objects.

Finally, ScrollViewController now interacts directly with
PlayViewMetrics instead of going through PlayView. This is much more in
line how the MVC pattern usually works.
CoordinateLabelsView no longer depends on PlayView for updates
PlayViewMetrics refactoring, part 3: fix "display coordinates" update mechanism

up until now the dependency of PlayViewMetrics on the "display
coordinates" user preference was an implementation detail not visible
to external clients. this caused clients to observe the wrong property
in PlayViewModel, with the result that clients would possibly get wrong
values from PlayViewMetrics.

this is now fixed: PlayViewMetrics publicly "admits" that it depends on
the "display coordinates" user preference by exposing both an updater
method and a property of its own. clients now use KVO on that property
instead of the one in PlayViewModel.
new drawing event "board size changed"

many layer delegates do not need to react to a new game being created,
unless the new game also uses a board with a different size. for those
layer delegates that *do* need to react, the new event allows to
distinguish between "re-create the Core Graphics layer, then re-draw the
layer" (board size change) and "re-draw the layer only" (new game).
minor optimization when drawing coordinate labels
various minor cleanups
PlayViewMetrics refactoring, part 4: hardcode static drawing properties in PlayViewMetrics

originally, a number of static drawing properties were stored in the
user defaults, with the idea that these properties one day might become
real preferences changeable by the user. this never manifested, so now
I am finally hardcoding these properties.

additionally, the properties are now located in PlayViewMetrics instead
of in PlayViewModel. as a consequence of this second change, most of the
layer delegates no longer require a reference to PlayViewModel.
cleanup: remove unnecessary method declarations and QuartzCore.h imports
cleanup: remove unnecessary UiElementMetrics.h imports