Add an --all option to check all known files.
Allow files from the working tree to be checked.
Add .gitattributes files.
Add a pre-commit subcommand.
Rename FileContentsCheck to FileCheck.
Add a class _CompoundCheck.

Use it in the implementation of CheckAnd, CheckOr, and MultipleCheck.
Add a method Check.get_needed_attribute_names().

We cannot rely on "git check-attr --all", so we need to be able to get
a list of the attribute names that we are interested in.
Inquire about specific git attributes names.

"git check-attr" only got the --all option in git 1.7.7, so use the old
method of asking about particular attribute names.
Dispatch subcommands via a table.
Improve documentation for "git nanny check-format".
Get gitattributes correctly for GitIndex and GitCommit.

In v1.7.8, git learned "git check-attr --cached", which reads the
.gitattributes from the index rather than from the working tree.  Use
this feature to correctly implement the reading of attributes for
GitIndex and GitCommit.  (For the latter, the commit has to be read
into a temporary index file and the gitattributes read from there.)
Add a subcommand "git nanny pre-receive".
Simplify the handling of NAMED_CHECKS.
Remove some obsolete types of checks.
Implement LogMessageChecks via a general form of CommitCheck.
Implement FileChecks via a FileCheckAdapter.
Combine booleans more carefully.
Implement AttributeBasedCheck using more basic components.
Cache the commit log message.
Change git-nanny to deal directly with the Check objects.