shiny: introduce glwidget package

A *glwidget.GL renders OpenGL calls into a shiny widget.

It is analogous to NSOpenGLView or GLSurfaceView.

This first version is extremely inefficient, it copies the pixels back
from the GL view to main memory, and then lets the gldriver copy it
again to a texture. But it gets the separate context concept clear,
and efficient rendering can be done in a later CL when the Paint method
has some reasonable way of accessing a Window's underlying GL texture.

It is in its own package to avoid adding a gldriver and cgo dependency
to the widget package.

This CL only contains X11 support, OS X will follow later.

Change-Id: Ib5044b62950eee070cd8b7729250e9c026b24b9f
Reviewed-on: https://go-review.googlesource.com/24300
Reviewed-by: Nigel Tao <nigeltao@golang.org>
7 files changed