Shouldn't the collision rules hash be off the entity struct? Rather than a global table?
Also: In the Q&A you mentioned that you don't like Function pointers for the dispatch table, but wouldn't it make it easier to process the consequences of a collision that way?