Use singleton for table handler
The TableHandler is keeping a copy of table definition (that is kept up to date on alteration). This definition is loading when the handler is instantiated. For a table this can happen few times during the register process because each register method extension may need the handler. So it will be good to have a single instance each time the handler is instantiated to avoid fetching the definition. Also when an ateration is done, we could just mark the definition is invalid and fetch the new definition only when it is needed.
The only point that prevents such usage is that the table handler is using the module name to prevent to drop indexes from other module (which is no more needed with #5757 (closed)) and to prevent to remove NOT NULL
constraint from a different module. Those are just guards and not really feature that I think we can drop for the benefit of reducing the number of queries.