Move OpenGL device implementation into separate directory

This will be converted into a crate once associated items are added and used in the `Device` trait. See rust-lang/rfcs#195.

The generated gl bindings have been moved to a separate crate. This fixes the private export warning, speeds up incremental build time, and allows folks to use `GlDevice::with_gl` better.

I also marked `GlDevice::with_gl` as unsafe because it can potentially mess with the state of the OpenGL context.