Big fat refactor, almost completely untested

The YAML configuration now allows slaves to be matched up with
builders based on a set of 'classes', which are essentially key/value
pairs such as 'arch: i686'.

Loose match filters enable multiple slaves to serve one builder.  For
example, 'arch' and 'rtos-flavor' don't matter for building docs, only
'distro'.

Schedulers are now explicitly defined, and also link to builder
configs via a key.

The PBChangeSource has been added, along with change filters and a
post-receive git hook that can supply changes.  This will enable
building from all branches, but filtering out non-UBC branches.

slaves:
- A 'DEFAULT' build slave entry is used to set defaults for other slaves
- YAML config is dumped directly into BuildSlave() so that
  'max_builds' and other params may be defined without special code
- 'slavePortnum' definition moved to YAML config

schedulers:
- Add 'Dependent' scheduler
- Add a ChangeFilter that can filter based on ancestor commits
  (This will be useful for detecting UBC)

other:
- Move other config items into YAML config:  auth, db...
- Minor updates to config.yaml.sample  FIXME
- .gitignore git-post-receive.log
- Remove e.g. 'globalconfigs' variables pointing to e.g. 'configs["global"]'
post-receive.py:  fix reading of config; remove upstream branch check

- config 'change_source' section name changed
- upstream post-receive.py check for 'regular heads' breaks us
  - my awk script that feeds this supplies a simple branch name that
    doesn't match the refs/heads/ regex pattern
master.cfg:  fixes

Move scheduler section below builder section, and only add builders
that actually had slaves and were instantiated.
post-receive.py:  fixes to previous fixes:  refname->branch
buildsteps.sh:  fix more git problems; add doc builds

- Remove 'git-web' step; taken care of in mirror script
- Clone/add remotes using git's '--mirror' option
- Fix git url forcing on incremental fetches
- Add doc building steps
Add builder prioritization

In config.yaml, builders may have a numerical 'priority'.  Lower
numbers are higher priority.  Default is 50.
buildsteps.sh:  cleanups & extra paranoia on init step

- check that the desired revision is in the checkout
- remove unnecessary cruft
master.cfg:  fixes to builder

- fix broken priorities
- remove meaningless builder debug output
master.cfg:  fixes to still broken change filters

A somewhat better attempt at calculating whether a given commit is the
ancestor of a change.  There's still a problem with the change
repository, though.  This might be fixed later, might be moved into
the post-receive stuff, or might be abandoned.
master.cfg:  add additional scheduler params from config file

Just the 'treeStableTimer' param, but others may be easily added
post-receive.py:  rework for stand-alone operation out of cron

A basic assumption is that the upstream repo doesn't notify us upon
changes.  This reworked script may be called from cron to poll
upstream repos listed in the config.  Upon fetching a change, the
revisions are scraped from git fetch output, after which the script
functions much as before.
master.cfg:  migrate to 'multi-multi-git-poller'; add revlinks

The 'multi-multi-git-poller' is a PBChangeSource with the
post-receive.py set to run from cron.  This commit begins migration
toward common configs.

Add 'revlink' param to config so that commits may point to URLs in
upstream repos
http://docs.buildbot.net/latest/manual/cfg-global.html#cfg-revlink
post-receive.py:  finish convergence of change source config

Fixes to read repos from the change_source section of config.yaml,
looking for a 'multi-multi-git-poller' changes source.
post-receive.py:  implement branch filters here

Since the meat of the change source git manipulation happens here, and
the config is now common, implement branch filtering here.

- only-ancestors-of param specifies a merge-base
- if the merge-base is the common ancestor of the current change, pass

Also add more short revisions for purtier debugging messages
post-receive.py:  create non-existent repos; prune local repos

Run checks to make sure the local git repo exists.  If not, clone the
repo, using config file params, but do not initiate a build.

At the end of processing each repo, prune local branches that do not
exist on the remote.
Update documentation in HOW-TO-local-git-repo, sample config

This refactors the docs since the major updates to git repo handling,
the extended builder/scheduler/etc. changes, etc.