Change to use explicit resource destruction

GC and finalizers for resource cleanup makes electrotype less portable
to various OpenGL wrappers, such as GTK's OpenGL extension, due to the
fact that resources might be collected after an OpenGL context has
already been destroyed. This leads to a case where memory can leak, or
worse, a late attempt at freeing the OpenGL resources which results in a
segfault.

This will probably only ever be a problem if you're application creates
and disposes of multiple OpenGL contexts, such as opening and closing
multiple windows which use OpenGL.

The most portable way to handle this is to simply expose explicit
destructors for any resources which need to be freed before an OpenGL
context is destroyed.

If electrotype were not wrapper-neutral, it would be possible to hook
into whatever mechanism handles OpenGL context lifetime management. GTK
provides the onUnrealize event, GLFW similarly could maintain references
or callbacks to finalizers.

As it is, this is the easiest and most portable solution. Users of the
electrotype are encouraged to use weak references or write their own
wrappers for handling explicit callbacks/finalizers when integrating the
library into their own software.