Add most of the 2d canvas APIs

The majority of functions is there, but some will follow in a later
commit.

This also sets a precedent for the split of things that should go into
js/dom and things that shouldn't. The 2d canvas APIs are relatively
small and only provide basic routines on a <canvas> tag, so we support
them directly. But since <canvas> elements also are used for 3d
(WebGL) contexts, we're not claiming GetContext for us, but instead
provide a GetContext2d as well as a more generic GetContext, where the
latter only returns js.Object, so that any package can make use of it
and wrap it appropriately.