Revert "Revert "Big structural changes""

This reverts commit e904d66e078cc6d214935ee0093415aee36d1c32.
Revert madness

I've been driving myself batty these last few day trying to: 1. abstract
all touch events to one canvas, and 2. allow the user to add joysticks
as they please like they can buttons.

These two tasks have resulted in hundreds of lines of code being
written, re-written, deleted, reconsidered, etc. It's been the source of
my reverting madness this past week and I feel I've reached a temporary
compromise. All touch events have been abstracted out to one canvas, and
joysticks may be placed anywhere on the screen. But only one joystick at
a time.

The big advantage of letting joysticks have their own canvas is:
- To take advantage of the touches.targetTouches array which makes it
super easy to track finger movement without affecting buttons.
The down sides are:
- Any area that was declared a "joystick" area would cover touch event
listeners for button canvases
- If a user placed their finger in a joystick area, moved it and created
a joystick, then dragged their finger into a NEW joystick area (ex:
dragging from left of screen to right with two joystick areas split
vertically) it would activate both without ending the first correctly.

There are just SO MANY potential ways a user can act unexpectedly,
clicking offscreen, pressing a button and releasing their finger outside
of the button, trying to mash multiple buttons like you would on a snes
controller, etc.... Making this thing bulletproof is exceedingly
difficult.

But for now I'm sticking with one joystick, anywhere on the screen, and
infinite buttons (pressed one at a time) anywhere on the screen.