Tried my best to improve collision detection with the Surface class.

I've mentioned problems before about objects not colliding with the
correct side of tiles associate with Surfaces when bouncing off of
them. After trying for awhile to fix this problem, I've come to realize
that there is no perfect solution. It turns out, the faster your
objects are moving, the more inaccurate any calculations involving
collision detection will be because the object's position changes too
much between frames. Once an objects speed passes a certain threshold,
my algorithm for detecting the side of a tile which an RBObject
collided with starts to become wildly inaccurate. After a lot of
changes to the findSide() method, I was able to raise this threshold
considerably. Before, the threshold was around 3.0, objects moving that
speed or faster would tend to pass through tiles sometimes when they
weren't supposed to. There were even times when slower object would
even pass through tiles. This was a problem because objects with a
speed of 3.0 don't really move that fast, it was a speed a user might
typically find objects moving at when playing a game. I was able to
raise this threshold to around 8.5, with objects moving 7.0 or slower
never passing through tiles. This is a much more acceptable threshold
because objects moving at speeds or 7.0 or higher move very fast, and I
don't think most people would put game objects moving that fast in
their games (and expect those objects to bounce off of walls). I'm
happy with the threshold I was able to obtain. I think it would be
suitable for any games I might want to create using my framework and
probably suitable for most 2D games. I did mention in the commenting of
the findSide() method in the Surface class however that one could
increase the threshold by making the environment tiles bigger
(likewise, if you make smaller tiles you will decrease the threshold,
but I'm not too worried about that because the 16X16 tiles that I'm
using are already on the smaller end I think).