Ensure that type extensions have closed types
Make exceptions a special case of type extensions

This commit essentially removes `Sig_exception` from types.ml, replacing its
uses with `Sig_typext`. This makes exceptions compatible with type extensions,
whilst still keeping them in the parsetree and typedtree to give accurate
printing. We also make the representation of type extensions identical to that
of exceptions, which improves the printing of extensions in the toplevel.
Add Obj.extension_name and Obj.extension_id