[Fixes bug #1190864] Correct the hotspot of the text cursor.

This makes positioning text much easier.
[Fixes bug #1190169] Clear the selection when clicking in the Text Tool.

In addition to the bug in the report, this also fixes bugs where the
selection would "teleport" to the new location if you clicked somewhere
else in the text.
[Fixes bug #1082663] Fix a few bugs with the text tool and selections.

The text tool now stores the original selection from when the editing of
that piece of text started. This ensures that the text doesn't suddenly
disappear or reappear if the selection changes before the text gets
finalized.
[Fixes bug #1191233] Add a null check in the text tool.
Make the OnMouseMove method abstract for BasePaintBrush.

Every brush needs to implement this differently, so it doesn't make
sense to have a default implementation.
Add some documentation for brush-related APIs.
Update the PaintBrush tool when a brush is added or removed.

Previously, you would need to restart Pinta after installing a custom
brush add-in.
Minor documentation update.
[Fixes bug #1191470] Fix bug with the paintbrush cursor not updating.
[Fix for #1190899] Clicking outside canvas with Move Selected Pixels or Gradient tool selected should have no effect
Removed extraneous/unrelated comments.

These comments in particular were created by me for my GSoC 2012 work,
and they are not useful to Pinta anymore.

- Andrew
First implementation of curve drawing.

Curve drawing, control point selection/deletion, and *visual* curve
history is now working. Still has work to be done, including proper
erasing, curve history/storage, and ToolLayer/UserLayer usage.
Improved on curve drawing.

Curves drawn on special Layer in UserLayer, UserLayer code improved
overall, multiple curves allowed, various improvements throughout,
improved curve history, and tension is allowed per control point
(although not yet implemented).

Still has work to be done, including fixing a small invalidation
rectangle glitch (slight remnants of selected control points are seen
when moved), finalizing work on curve history/storage, making curve
points look similar to selection points, replicating a selection bug fix
from the TextTool, adding finalization to curves when OnCommit is
called, taking curve width into account for drawing control points and
detecting mouse clicks on curves, adding right click + drag tension
functionality, spatial hashing for quicker control point detection, only
recalculating the modified segments of a curve, moving the selected
control point with the arrow keys, double clicking on an end point to
extend the curve (creating a new end point on the outside), and holding
down Ctrl to hide existing control points and ignore existing curves
(allowing the user to create new ones nearby without a hassle).
Added curve finalization and improved on various aspects of it.

Also moved 3 files out of Pinta.Core and into Pinta.Tools and added 2
new functions to CairoExtensions.
Made UnionRectangles use Nullable Rectangles.

Also modified the code in LineCurveTool to use it properly.
Implemented spatial hashing and highlighted points for curves.

Also improved things overall and created the OrganizedPoint class.

Still have yet to make control points look consistent with the rest of
Pinta and change size based on curve width.
Performed some minor code cleanups/fixes.
Performed some more minor code cleanups/fixes.
Added tension modification.

Also reorganized some code and improved on it overall.
Added preliminary arrow drawing.

Also massively reorganized CurveEngines to be stored in a
CurveEngineCollection for better usage overall and easier expansion
(multiple curves being edited at once).