keyword: use parent of working copy as base for status

Instead of calling repo[None].status(), use the more common form that
uses the parent of the working copy as the base:
repo['.'].status(). Note that the former defaults to comparing to
revision '.', while the latter defaults to revision None, so the
contexts being compared are the same.

It might seem like this would result in a reverse diff, but it turns
out that workingctx.status() incorrectly reverses the result. That bug
will be fixed in a later commit.

--HG--
branch : stable
context.status: remove incorrect swapping of added/removed in workingctx

The comment in workingctx.status() says that "calling 'super' subtly
reveresed the contexts", but that is simply not true, so we should not
be swapping added and removed fields.

--HG--
branch : stable
bookmarks: explicitly track identical bookmarks

bookmarks.compare() previously lumped identical bookmarks in the
"invalid" bucket. This patch adds a "same" bucket.

An 8-tuple for holding this state is pretty gnarly. The return value
should probably be converted into a class to increase readability. But
that is beyond the scope of a patch intended to be a late arrival to
stable.

--HG--
branch : stable
extra : rebase_source : 44b6ca263e3183f436634f412198a4c09da5d364
exchange: don't report failure from identical bookmarks

b901645a8784 regressed the behavior of pushing an unchanged bookmark to
a remote. Before that commit, pushing a unchanged bookmark would result
in "exporting bookmark @" being printed. After that commit, we now see
an incorrect message "bookmark %s does not exist on the local or remote
repository!"

This patch fixes the regression introduced by b901645a8784 by having
the bookmark error reporting code filter identical bookmarks and adds
a test for the behavior.

--HG--
branch : stable
extra : rebase_source : 4dc8d11b52879900c321d0d2bb487101556ed8ac