Texture binding + creation

Closes #49
From the OpenGL 3.3 Spec, p136,

> The new texture object bound to target is, and remains a texture of the dimensionality and type specified by target until it is deleted. BindTexture may also be used to bind an existing texture object to any of these targets. The error INVALID_OPERATION is generated if an attempt is made to bind a texture object of different dimensionality than the specified target. If the bind is successful no change is made to the state of the bound texture object, and any previous binding to target is broken.

I think I read this wrong the first time. If something was bound as Texture2D, you *can* later bind it as Texture1DArray, I think. That complexifies things a lot and seems like it'd be error prone to handle... As for Metal, textures are not bound to a given target to give them their type, they are created with that type and then immutable.