Extract pull request behaviors into a set of classes.

This is a bit of a complicated refactor, but greatly helps reduce the
complexity of the main BuildRelease command and increase the
expandability of the Change sets to make it easy to support changes
besides pull requests (i.e., merges and commits).