Use Python @properties.
Added --max-depth for pathological git histories.

If someone, for example, commits locally then does a "pull" every day for
several months, and then pushes his branch back into master, the
hierarchical representation of those merges is not going to be very useful
or readable.

Now `log` will default to --max-depth=4 and will flatten merges at depths
greater than that, and suppress their commit details so that the more
important, non-merge commits can be more easily seen.
Merge remote-tracking branch 'github/master'