Proper fix for issue #22 and #23

This fix allows multiple buttons changes to arrive in the same
event. Before this, releasing (for example) left and right buttons
at the same time would ignore left button relase. The os would
then think the mouse was still being pressed, which is what not.

Also refactored the mouse code.

Also,
- added timers to track down our worst enemies for a smooth mouse
  (currently CGPostEvent)
- added --memory for logging to memory
- added --timings to log timing stuff
- fixed proper conversion from mach timebase to nanoseconds
- changed constraint policy period to 500hz devices