This patch adds a special, internal, "codependencies" package that allows us to
specify minimum required versions for modules we don't directly depend on.
Downside:
* Anyone using this module will also have to download these deprecated modules.
Upside:
* After upgrading this module, all "codependencies" will automatically be
upgraded to compatible versions.
* If unused, codependencies will _not_ end up bloating the binary size. This is
because "usage" is computed at the import/package layer, while module version
requirements are computed at the module layer.
* Enforce minimal varint encoding when decoding multiaddrs.
* Ensure codecs fit in 32bit integers for compatibility. We can increase the
size, but we'd need to change the `Protocol.Codec` type from `int` to `uint64`.