FIX: Fix init order

This addresses an issue where `on_draw` could be called before `canvas._backend` was set, which can be problematic. While fixing this and making tests more comprehensive, I also fixed an issue where `pyglet` could send more than one `on_initialize` event (whoops).

Closes #361.
Must set_current not occur on every show? i.e. when using multiple windows... although it could be that pyglet already does this for us.