With this change, the parent or parents of a change can be easily
specified on change creation. The same holds for new patchsets
(-> rebase situation).
Thus, changes can deliberately be merge or non-merge commits or even
switch between the two between patchsets. The API also supports more
than 2 parents as we might want to test some of our code for robustness
even for that unlikely situation (e.g. we have explicit code for octopus
merges inside of the diff caches which is likely untested right now).
At the moment, we support four different variants (commit SHA-1, branch
name whose tip should be taken, change whose current patchset should
be taken, patchset) for indicating parent commits. If necessary,
further variants can be added with just a few lines of code in the
future.
Some of the added builder objects might seem unnecessarily complex.
However, we decided to go for a flexible, fluent API which is as easy
and guided as possible during its use. To achieve this, we need some
more builder objects which we need to stick together in the right
manner.
Change-Id: I4bf2040798cad9fcdbfb46add55b93bf3c7023f7