Add XypicDiagramDrawer and start implementing the method draw().

This commit also adds XypicDiagramDrawer to __init__.py.  The method
draw() only places the objects in the Xy-pic grid for now.
XypicDiagramDrawer: Begin typesetting the morphisms.

All morphisms are currently drawn straight, without curving, which
quite often results in ugly overlapping.
XypicDiagramDrawer: Factor out morphism drawing into _draw_morphism.

This commit adds _draw_morphism to keep the method draw() less
cluttered.
XypicDiagramDrawer: Map objects to morphisms in advance.

This commit modifies the method draw to create the mapping between
an object and those morphisms which have this object as domain in
advance, instead of using a function to achieve this mapping.
XypicDiagramDrawer: Add some rudimentary testing code.

These are not proper tests, but rather some printing which serves for
debugging purposes.  This code will be modified later.
XypicDiagramDrawer: Enable _draw_morphism to produced curved horizontal arrows.

This morphism enables _draw_morphism do decide when to draw curved
morphisms, how to curve them, and where to place the label.  This does
not solve the problem of positioning the labels of other morphisms,
however.
XypicDiagramDrawer: Decouple the analysis of morphisms from typesetting.

This commit makes the analysis of morphisms in view of producing the
corresponding string representation a separate stage, which happens
before the actual generation of Xy-pic code.  This allows traversing the
morphisms in any order, as well as modifying the properties of some
morphisms after they have already been analysed.
XypicDiagramDrawer: Also consider those which go into the object.

Previously, _process_morphisms would only consider those morphisms which
came out of the objects to decide on the direction in which to curve
arrows.  This is obviously wrong and this commit fixes the issue.
XypicDiagramDrawer: Sort the morphisms by their length and direction.

Before analysing the morphisms, XypicDiagramDrawer now sorts them such
that horizontal and vertical morphisms between neighbouring objects come
first, then longer horizontal and vertical morphisms, and finally,
diagonal objects.
XypicDiagramDrawer: Fix how sticking out morphisms are collected.

This commit makes it sure that only morphisms which indeed stick out of
the objects between the domain and the codomain of a long morphisms are
counted when deciding in which direction to curve the arrow.
XypicDiagramDrawing: Fix the abuse of the variable name "morphism".

_process_morphism would spoil the value of its argument "morphism" by
reusing this name for looping.  This commit fixes it.
XypicDiagramDrawer: When bending morphisms, fix the positions of affected labels.

Sometimes the bending morphism can pass over a name of another morphism.
This commit fixes the issue for the cases when a bending horizontal
morphism passes through the label of a horizontal morphism which is in
the same row.
XypicDiagramDrawer: Test how the cube is drawn.

This commit adds the test for drawing a cube laid out automatically,
without any hints.
XypicDiagramDrawer: LaTeX-print all names.

This commit makes all names print with sympy.printing.latex.
XypicDiagramDrawer: Also try to draw the transposed diagram.

This commit invokes XypicDiagramDrawer to draw the same diagrams as
before, but transposed, to show that vertical curving arrows are not yet
supported.
XypicDiagramDrawer: Enable vertical curved arrows as well.

This commit replicates the functionality for drawing horizontal curved
arrows.
Add _StrArrow to represent the Xy-pic information about an arrow.

This commit transitions from using tuples to store the Xy-pic
information about an arrow to using a specialised data type.  This
makes this part of the code more flexible and less error-prone,
especially because of the use of names to access certain information
instead of tuple indexing.
XypicDiagramDrawer: Use a different default curving of arrows.

This commit adds the fields unit and default_curving_amount to
XypicDiagramDrawer.  The second field describes how much arrows will get
curved by default.  The first field describes the units which will be
used by default throughout the Xy-pic code.
XypicDiagramDrawer: Add some debugging output for overlapping curved arrows.

This new bit of debugging output shows that nothing is undertaken when
two curved arrows are known to overlap.
XypicDiagramDrawer: Handle overlapping curved morphisms.

This commit makes XypicDiagramDrawer draw every new curved morphism
between the same two objects with a larger amount of curving.