Make branch description non mutable redux

This pull request makes all data members of the BranchDescription class non-mutable, and all member functions that modify any member are made non-const. This makes it much easier to identify where any instance of this class is modified. This is important for the multithreaded framework, in that this class is used in the ProductRegistry, which is accessible across threads. This code has been tested. Unit tests and relvals all pass.
This is a repeat of pull request 77 but with the merge conflict resolved.