module management rework

This PR includes changes to the `flux-module` command, modctl comms module, and the API for module management.

The module management API can now be applied to any flux service that wants to support dynamically loadable modules.  They have to implement the operations described in RFC 5, using provided utility functions, and then `flux-module` and `modctl` can operate on them.

There are detailed comments in the commits, especially b16122e and 373ce64.
Here is a demo of how the tools apply to a comms module (`parent.so`) that itself loads a module (`child.so`).
```
$  ./flux start -s8
cmbd: 2745-0: starting shell
$ ./flux module -a list
Module                 Size  Digest Idle Nodeset
modctl               693824 C56F6AB    0 [0-7]
wrexec               685650 46047BE    1 [0-7]
mecho                661715 0F055F7    1 [0-7]
api                  603102 3C9E402    0 [0-7]
kvs                  667659 CAF43BB    0 [0-7]
job                  666099 5156086    1 0
resrc                666711 3657874    1 [0-7]
barrier              598532 B7E46DF    1 [0-7]
live                 708351 6E063BA    0 [0-7]
$ ./flux module -a load ../test/module/.libs/parent.so
$ ./flux module -a list
Module                 Size  Digest Idle Nodeset
modctl               693824 C56F6AB    0 [0-7]
parent               656693 0FC1912   14 [0-7]
wrexec               685650 46047BE   14 [0-7]
mecho                661715 0F055F7   14 [0-7]
api                  603102 3C9E402    0 [0-7]
kvs                  667659 CAF43BB    0 [0-7]
job                  666099 5156086   14 0
resrc                666711 3657874   14 [0-7]
barrier              598532 B7E46DF   14 [0-7]
live                 708351 6E063BA    0 [0-7]
$ ./flux module -a load ../test/module/.libs/child.so foo=42 bar=abcd
$ ./flux module -a list parent
Module                 Size  Digest Idle Nodeset
parent.child         648943 2A9F4F8    0 [0-7]
```