Add wrapper for canvas and its contexts

This wraps `HTMLCanvasElement` so that we can return wrapped `CanvasRenderingContext2D` and `WebGLRenderingContext`. The context methods that take an `HTMLElement` are then wrapped to unwrap that argument.

Fixes #178