replace most of the hook system with a simpler one that uses interfaces to pre-calculate hook support and uses a lot less reflect