use dispatchTable for shape-vs-shape collision queries

As we get more Shape types the code that tries to navigate to the correct collision query code grows in complexity with O(N^2)... unless we use a dispatch table of pointers to functions.  Since we're going to add one or two new shapes and we were already at four distinct types, it was time to make the dispatch, so here it is.

BTW, the resulting code is about twice as fast as the old "if, elseif, elseif" tree, but that isn't very important because the actual collision checks are far more cumbersome than finding the correct function call.  The important thing is that the "if, else if, else if" tree no longer needs to be expanded and maintained.
I used this function (and some other hackery that I didn't commit) to measure the time to find the correct collision function for the shape types.  The old time was about 10 usec per sphere-sphere pair (best case scenario for the old code since the sphere type was the first check).  The new time was more like 6 usec and should be invarient for all types.