OpenGL Refactor

Supersedes #83.

>Rework OpenGL renderer.
>
>The OpenGL renderer has been revised, with the following changes:
> - Initialization and rendering have been refactored to reduce the number of
>   redundant objects used.
> - Framebuffer rotation is now done directly, using texture mapping.
> - Attempt to support the LCD framebuffer size registers, under the
>   assumption that the 3DS hardware does hardware scaling in case they
>   don't match the physical LCD resolution.
> - Vertex coordinates are now given in pixels, and the projection matrix
>   isn't hardcoded anymore.

Fixed up outstanding code review comments and changed RenderXFB to take non-const references.

I disagree, syntactically having single letter variable names is plain ugly, easily abused, and I would much rather just set a precedent of not allowing it within our style guide. One's opinion of "it's just obvious" is not something that can be universally applied to all contributors.

Furthermore, I guess I'm OK with `std::array<GLfloat, 3*2>`. My question was more rhetorical than anything, as I'm familiar with the domain. I just think that it is somewhat crufty to self-document that it's a 3x2 matrix by multiplying 3 and 2... Why not typedef this?