rebase: fix rebase aborts when 'tip-1' is public (issue4082)

When aborting a rebase where tip-1 is public, rebase would fail to undo the merge
state. This caused unexpected dirstate parents and also caused unshelve to
become unabortable (since it uses rebase under the hood).

The problem was that rebase uses -2 as a marker rev, and when it checked for
immutableness during the abort, -2 got resolved to the second to last entry in
the phase cache.

Adds a test for the fix. Add exception to phase code to prevent this in the
future.

--HG--
branch : stable
rebase: fix working copy location after a --collapse (issue4080)

Rebasing with --collapse would leave the working copy on the parent of the
collapsed commit, instead of on the collapsed commit.  This fixes that.  Also
fixes a few tests that already covered this area but had bad data.

This also fixes issue3716 where bookmarks are not kept across rebases with
--collapse. I updated the test to cover that case as well.

--HG--
branch : stable
extra : rebase_source : f34129b0495d2afb94f85f9aad0d4f22f0831cbf
merge: move forgets to the beginning of the action list

Forgets need to be in the beginning of the action list, same as removes. This
lets us avoid clashes in the dirstate where a directory is forgotten and a
file with the same name is added, or vice versa.

--HG--
branch : stable
extra : rebase_source : 1dc391a1b0d92379fb70545ac6bd58ab49228e94