WIP: Mouse controller

The basic functions seem to be working pretty well. @Eric89GXL and @drammock, if you have any time tomorrow morning, can we check to see if what I did makes any sense?

I'm pretty sure the subclassing stuff doesn't need to be in there, since a mouse is always a mouse, but I didn't take it out since it currently works and if that stuff does need to be there it will be annoying to put back in.
Good idea. We should be able to test this workaround easily on our VMs.