Library interface visibility control

This implements `cmi/cmx` visibility control for libraries in generated `.install` files. visiblity is specified through the `~interface` at the level of compilation units. N.b. I first added two fields `opaque` and `hidden` but then realized that `hidden` implied `opaque` so I now use a tri state field (`Normal | Opaque | Hidden`).

Should fix #105. Is related to #86.