Add Class, Object, and Morphism.

These classes represent the very bowels of the module.  They are
yet in their incipient form, which is sufficient, however, to start
writing the tests.
Write the tests for categories.Object and categories.Morphism.

The tests do not pass at the moment.  The goal is to define the desired
behaviour of the methods in Morphism by means of tests.
Implement composing and flattening morphisms.

Composing two morphisms results in a morphism which knows which
morphisms it was composed from.  Flattening such a morphism results in
forgetting the information about components.
Extend the string printer to print Object and Morphism.

Also add the corresponding tests.
When composing morphisms, intersperse morphism names with '*'.

The initial approach to use spaces to separate morphisms names proved
inconsistent with the later idea to use '*' when printing morphism
composition.
Amend the string representation of composition of morphisms.

The initial version did not comply with the requirement that the
represented object be able to be reconstructed from the string
representation.
Don't automatically construct the name of the composed morphism.

This also concerns flattened morphisms.  While initially it seemed to be
a good idea to automatically construct new morphism names, it proved
later that trying to be clever when it's not necessary is never good.
Add pretty printing for Object and Morphism.

Pretty printing supports anonymous objects and morphisms.  Also add the
corresponding tests.
Add printing to LaTeX.

Also add the tests for printing to LaTeX.  Anonymous objects and
morphisms are supported.
Add (un)equality operators to Object and Morphism.

Also extend the docstrings and the tests to cover the added semantics.
In morphism equality, composed morphisms are only compared by their
components.  Thus, the names of composed morphisms are insignificant at
comparison.
Add some nice formatting to the docstrings.

Follow the formatting style found in, for example,
sympy.core.symbol.
Add examples to Object and Morphism.
Update the comment in __init__.py to include the principal reference.

This book should be referenced by the notation [JoyOfCats].
Add Category.

This is the base class for all categories.  It will contain very little
functionality related to objects and morphisms.
Extend string, LaTeX, and pretty printers to support Category.

Only the name of the Category is currently printed.  It is improbable
that much additional information will ever be included in the pretty
printed representation of a Category, just because it is so in the books
on the topic.
Add the skeleton of Diagram.

This commit defines the class and its methods without functionality.
The functionality itself will be implemented after the tests have been
added.
Add some tests for Diagram.

The tests also attempt to cover some subtle aspects of how the diagram
treats its objects and morphism.
In Morphism, define __new__ to allow keyword arguments.

Since Morphism derives from Basic, and Basic.__new__ does not accept
keyword arguments, Morphism could not be constructed with keyword
arguments.  While this is all right for simple constructors like those
of Object and Category, the constructor of Morphism will quickly become
awkward to use if the user will be required to supply all arguments in
order.
Implement identity morphisms.

A Morphism can now be defined to be an identity.  Identity morphisms are
defined not to influence composition.  All identity morphisms of one and
the same object are equal.
Fix the tests for Diagram to properly use identity morphism.

Identity morphisms were implemented after the tests for Diagram, so
there was a need to slightly correct them to properly use identities.