The immutable objects are a concept only enforced by the C API.
So move checks only to that region.
This does assume that the rest of the code is careful not getting
into these internal methods on immutable objects, which something
we do, but have no way of enforcing (currently).
.
Disable copy/assign on them, as they shouldn't.
Make constructor / destructor call init_shallow/fini_shallow,
and make those idempotent. So, these three can be constructed
on stack now and no init/fini call is needed. As such,
hb_auto_t<> is not needed anymore. I'll remove that separately.