test-git-submodules: replace hg cat with hg manifest

Mercurial commit a2cc3c08c3ac added support for hg cat across subrepositories.
That caused these tests to break. Fix this by using hg manifest instead.
revset_gitnode: use repo.changelog.node instead of contexts

For a repository with around 60,000 commits, perfrevset for gitnode becomes:
before: ! wall 1.130716 comb 1.130000 user 1.130000 sys 0.000000 (best of 9)
after:  ! wall 0.178828 comb 0.180000 user 0.180000 sys 0.000000 (best of 54)

In reality, perfrevset doesn't clear the Git-to-Mercurial map, which means that
a call like `hg log -r 'gitnode(...)'` speeds up from around 1.5 seconds to
0.6.
revset_fromgit: use repo.changelog.node instead of contexts

hg perfrevset 'max(fromgit())' on a repo with around 60,000 commits:

before: ! wall 1.055093 comb 1.050000 user 1.050000 sys 0.000000 (best of 10)
after:  ! wall 0.148586 comb 0.140000 user 0.140000 sys 0.000000 (best of 62)

In reality, perfrevset doesn't clear the Git-to-Mercurial map, which means that
a call like `hg log -r 'max(fromgit())'` speeds up from around 1.5 seconds to
0.6.
filter_refs: only return all refs when heads is None

We're going to pass in an empty list to this function in an upcoming patch,
with the intent that filter_refs returns an empty dict.
test-bookmark-workflow: introduce tests for incoming bookmarks

An upcoming patch will change bookmark discovery significantly. These tests
make sure nothing major regresses.
listkeys: while looking for bookmarks, don't fetch a pack

hg pull calls listkeys for bookmarks. This would previously cause a pack with
all refs to be fetched. For Mercurial mirrors of Git repositories where only
some refs were mirrored, this would cause problems in a bunch of ways:

- A larger pack would be fetched than necessary.
- The final refs written out to the Git repo would only be the set of refs we
  were actually interested in. If a GC was subsequently run, unreferenced
  objects would be deleted. Those objects might be referred to on subsequent
  fetches, which could cause hg-git to crash.

We replace all that logic with a simple null fetch. The tests introduced in the
previous patch ensure no regressions.
Merge git://github.com/schacon/hg-git