Check for unreferenced components in precommit.sh

Emit an error if any files under 'py' are not reachable from the
dependency graph of the binaries we distribute.

Test Plan:
$ ./precommit.sh
fails due to dead code, remove the dead code
$ ./precommit.sh
Include class methods in generated comments

When generating the 'contents block' comments which are inserted into
the python source, also include the names of methods exposed on the
class.

Test Plan:
$ ./precommit.sh
inspect diff of generated comments
fixup! Arcyd: sanitize git abstraction
Tidy, split abdt_git branch class to new component

To make dependencies more explicit and the source a bit smaller, move
the _ManagedBranch implementation out into it's own component.

Test Plan: $ ./precommit.sh
Tidy, re-organise abdt_branch

Make abdt_branch easier to work with by re-ordering the methods to
put the accessors first and group things a little more logically.

Test Plan: $ ./precommit.sh
Tidy Arcyd, remove branch imp detail accessors

Make abdt_branch a bit nicer by removing the dependence on the
review_branch and tracking_branch accessors which were exposing imp
details.

Test Plan: $ ./precommit.sh
Tidy Arcyd, remove tracking_branch_name accessor

Test Plan: $ ./precommit.sh
Tidy Arcyd, branch iface to not mention pushing

Test Plan: $ ./precommit.sh
fixup! Arcyd: use new branch abstraction to simplify
Comment Arcyd: abdt_branch

Test Plan: $ ./precommit.sh
Document pre-commit scripts

Test Plan: $ ./precommit.sh