Cleaned up object movements (bouncing off walls) in TraceableObject

- There was some truly odd behaviour when objects bounced off walls. For
example, if x exceeded the boundary, it would not increase past the wall
and, after one time step, it would start moving in the opposite
direction. However, the y value would continue to move in its original
direction for one time step. This is all fixed now
- Cleaned up turnaround angle code from four if-statements into one
clean one, as well as adjusting x and y by the correct value
- Changed the bounce angle code to be more moderate and make more sense.
Now, the angle will flip by 180 degrees, then change by a factor of + or
- 30 degrees. The previous code would only do positive and not negative
angle changes.