Make Registry public

This change set exports a Registry interface implemented by the local
registry type. I added TODO comments along the way with improvements
that could be done to reduce the surface area of a Registry's behaviour
and to make the code more orthogonal overall. I'd be glad to contribute
these changes over time, if you like the direction I propose.

This has been done on top of the `standard-exports` branch.

All tests pass except for the Linux specifc `/proc` related tests. I
suggest that we add linux specific build tags to those files.
The returned collector is actually the _existing_ collector if you try to register a new collector that is equal to an already registered collector. In that case, `(existingCollector, errAlreadyReg)` is returned, see `RegisterOrGet`.

First, that behavior should also be documented for the Register method (not only for RegisterOrGet). Currently not the case, my bad.

Second, this whole call semantics is legacy from early ideas (not mine, actually). I'm not a fan of it, and it is worth a discussion if it makes sense at all, and I'm happy to have that discussion. But please not as part of this PR. We can express in a TODO that we are going to have that discussion, but the rationale in your TODO above is misleading (because the returned reference is not necessarily the one the caller has).