BuildChooser: refactor (slave,breq) logic into strategy object

* moved the following logic from Builder to BuildChooser
 - slave choice
 - build choice
 - build merging
* move the following logic from Builder to BuildRequestDistributor
 - managing the brid reclamation
* adjusted some of the logic on how locks are saved in member variables.
  This makes some of the code more uniform and reduces some redundancy.
* unit tests moved appropriately from process_builder to process_BRD; a few more unit tests to cover new functionality

The slave-choice logic now checks if slaves can grab build locks. Slaves that
can are preferred to slaves that cant.

Also adding a customization point that lets slaves to be chosen based on
particular builds; for example, a patch is coming that will add a ForceScheduler
parameter to force a build onto a particular buildslave.