bundle2: lock the repo during unbundle test

We forgot the lock the repo. It's not too bad during tests, but the lock also
still carry some transaction logic. (yes we need to get rid of this)
bundle2: feed a unbundle20 to the `processbundle` function

The unbundle can comes from multiple sources. (on disk file, peer, etc) and
(ultimately) of multiple type (bundle10, bundle20). The `processbundle` is no
longer in charge of creating the bundle.
bundle2: introduce a bundleoperation object

This object will hold all data and state gathered through the processing of a
bundle. This will allow:

- each handler to be aware of the things unbundled so far
- the caller to retrieve data about the execution
- bear useful object and logic (like repo, transaction)
- bear possible bundle2 reply triggered by the unbundling.

For now the object is very simple but it will grow at the same time as the
bundle2 implementation.
bundle2: record processing results in the bundleoperation object

Part handlers can now add records to the `bundleoperation` object. This can be
used to help other parts or to let the caller of the unbundling process react
to the results.

--HG--
extra : amend_source : 784cc03ddaca931505fb44ff1f00cf8067e7c0fd
bundle2: first crude version of bundling changeset with bundle2

The current changegroup format is put in a "changegroup" part and processed by
an appropriate handlers.

This is not production ready code, but let us start smoke testing.