Move Canvas initialization into getgc

This seems the safest approach. Previously-tested alternatives:
- Putting init_canvas in pack, grid, and place: the problem here is
  that you can't build a hidden window, and that would be a nice thing
  to be able to do.
- Binding it to <Map>: the problem is that the callback runs
  asynchronously, and if you quickly call getgc(c) it might fail.

This has to be done a bit carefully, in case the first call to getgc
occurs inside a c.redraw method.