Why is this signal called `contacted`? I would prefer to call it `preSolve` as per Box2D API. Keeping consistent with that API helps people who are already familiar with Box2D and it also helps new people learn by looking at other Box2D examples or reading the Box2D manual. Also, we should probably add `postSolve` as well.