Move to frames instead of constant redraws

Every time an object changed their state, the whole canvas had to be
redrawn. Now a change in state notifies the canvas that it needs to be
redrawn, and the canvas will redraw itself every frame if it has been
notified.