context: handle censored data in an on-disk file context based on config

Two possible behaviors are defined for handling censored data: abort, and
ignore. When we ignore censored data we return an empty file to callers
requesting the file data.

--HG--
extra : amend_source : 47b8395e0d9417743727c26709ed012fc1331059
verify: report censored nodes if configured policy is abort

--HG--
extra : rebase_source : 995c99680ea569829d8ef4df79d51c0e00b0feda
revlog: support importing censored file revision tombstones

This change allows a revision log to not fail integrity checks when applying a
changegroup delta (eg from a bundle) results in a censored file tombstone. The
tombstone is inserted as-is, so future integrity verification will observe the
tombstone. Deltas based on the tombstone will also remain correct.

The new code path is encountered for *exactly* the cases where _addrevision is
importing a tombstone from a changegroup. When committing a file containing
the "magic" tombstone text, the "text" parameter will be non-empty and the
checkhash call is not executed (and when committing, the node will be computed
to match the "magic" tombstone text).

--HG--
extra : rebase_source : 59d4d00625ec5707afb70c52da98a64b401b57ff
sshpeer: forward stdout of remote "hg init" to appropriate output channel

Otherwise, commandserver channel could be corrupted.

--HG--
extra : rebase_source : cf628a7879b0a163a7d545afc2b4e45e1b3dd7d5
pull: make discovery phase extensible

We apply the same approach as for push and make the discovery extensible. There
is only one user in core right now, but we already know we'll need something
smarter for obsmarkers. In fact the evolve extension could use this to cleanly
extend discovery.

The main motivation for this change is consistency between push and pull.

--HG--
extra : rebase_source : e3920a3206d30fdee8b8cbefb78f69d5c6bbe7a6
pull: use `stepsdone` instead of `todosteps`

The push process uses a `stepsdone` attribute instead of a `todosteps` one (with
the logic swapped). We unify the two process by picking the `stepsdone` version.
I feel like `stepsdone` better fits extensions that would want to extend the push
exchange process.

--HG--
extra : rebase_source : 3d04bccc2ef44721fab7c366e69845930c6cab37
test-bundle2: test that we got appropriate hook called with appropriate data

We can notice that this transaction wide hook is only happening during push and
it is missing changegroup-related information. We'll want to fix this but this
is not what this patch is about.
test-bundle2: also test the argument of the changegroup hook

We also track execution of the changegroup hook. The important information here
is to make sure the information that the transaction was processing a bundle2 is passed to
hook. This will let most hooks disable themselves while waiting for the hook
concluding bundle2 processing (the one we discovered to be not called for
pull in the previous changesets).
phases: inform transaction-related hooks that a phase was moved

We do not have enough information to provide finer data, but this is still
useful information.
bookmarks: inform transaction-related hooks that some bookmarks were moved

We do not have enough information to provide any finer data, but this is still
useful information.