Improving the Texture Api

The old texture Api had the problem that functions like `texImage2D` has a predefined texture target. This commit range changes `TextureTarget` from a ADT to a typeclass, with new ADTs like `TextureTarget2D` for each dimension.

Note: This is very old code, yet I think the idea is right.