Cleaned up a lot of LineCurveTool code.
Created an EditEngine class for abstraction.

Abstracted a lot of the LineCurveTool code to a new EditEngine class for
later usage with other tools that will be made editable.
Abstracted most of the code out of ShapeTool.

The LineCurveTool is still functioning as before. However, none of the
other ShapeTool child classes are intended to function properly yet. The
EditEngine and each of these classes will need to be modified so that
the EditEngine will incorporate selection functionality rather than
drawing functionality and these other tools will appropriately draw or
select their intended shape.
Began preliminary work for editable Rectangles.

It is, of course, not yet complete yet.
Abstracted arrows out of the EditEngine.

The LineCurveEditEngine and RectangleEditEngine now derive from
ArrowedEditEngine, a new abstract class which adds arrow options.
(Terrible state) Implemented basics of editable ellipses and rounded shapes.

Warning: this commit leaves some tools in an awful,
alpha-development-stage state, including the Rectangle, Ellipse, Rounded
Rectangle, and some of the Select tools. On the plus side, the basic
functionality of editable ellipses and rounded shapes (beyond just 4
corners) has been added, and the rest of Pinta seems to be working okay!
Added ReEditableLayers to ShapeEngines.

HistoryItems are not yet functioning properly in accordance with these
ReEditableLayers.
Stopped drawing all shapes instead of one.
Added editable shape closing and filling.
Implemented basic cross-tool editing.

Deactivated methods now have a reference to the tool being activated and
can determine whether or not it is editable. The BaseEditEngine's
ShapeEngineCollection SEngines is now static, meaning that all of the
editable tools share one collection for everything. Work still has to be
done to make the cross-tool shape editing work as it should though.
Improved editable shape control point editing.

Also improved efficiency of ellipse generation, fixed an ellipse bug by
confirming that there's a perfect rectangle to generate an ellipse,
fixed a rectangular-based control point moving bug by updating the
opposite point's position anyways, moved repeated code into
BaseEditEngine for code efficiency, renamed some protected methods in
BaseEditEngine to start with a lower case, and moved some methods around
in BaseEditEngine for better organization.
Implemented shape type modification.

Undo and redo is glitchy.
Added direct ControlPoint clicking behavior.
Fixed the generation of small rounded shape points.

Also cleaned up and commented the code in RoundedLineEngine's
GeneratePoints method.
Fixed a small, noticeable crack in solid ellipses.
Added actual shape deletion and cleaned up code.

Also fixed the order of creating a ShapesModifyHistoryItem before adding
a new shape.

undoSurface and the CreateHistoryItem method were both unused. The
history items were simply renamed to be plural, since that better
represents their actual function and usage.
Greatly improved editable history and code readability.

ReEditableLayers are now capable of being added and removed from the
drawing loop. This is needed because multiple REL's are created when
history items are created, and we do not want duplicate shape drawings
and such. This involved some modifications to ShapesHistoryItem,
ShapesModifyHistoryItem, and ShapeEngine classes as well. REL's also now
have fewer duplicates, due to shared REL instances among cloned
ShapeEngine instances.

addShape and createShape (EditEngine methods) have been combined into
one.

A lot of code in primarily BaseEditEngine has been rearranged, added,
removed, and/or renamed. This was done to improve code readability,
efficiency, and consistency.

Colors have been stored and responded to differently so as to
individualize shapes with their corresponding colors.

Instead of having an abstract PartialClone method in ShapeEngine
classes, it has been made non-abstract, non-overridden, and split into
having a second abstract method called cloneSpecific, which child
classes now override to add their unique clone data.

HandleBeforeUndo/Redo methods have been added to ShapeTool using the
already existing TryHandleUndo/Redo methods.
Implemented corresponding ShapeTool activation.

When a shape is to be modified, its corresponding ShapeTool (and
EditEngine) should now be activated for proper editing.
Fixed some ShapeType and finalization bugs.

Also fixed a shape type change selection bug, improved the BrushWidth
and ShapeType properties' code a little, fixed some hover point bugs (by
rearranging some code and also drawing on the ToolLayer when no
ShapeEngine is active - it gets erased afterwards), and made a few other
minor changes.
Fixed a new ControlPoint ordering bug.

Added a GeneratedPoint class to fix it. This may seem to complicate
things a little, but it was actually a necessary change in order to
maintain proper ordering of new ControlPoints added onto shapes. This is
because now, some shapes (like rounded rectangles and ellipses) do not
have any generated points overlapping their ControlPoints, which was
previously used to keep track of a generated point's order in the shape.