VertexBuffer uses VBO for vertex submission

Unlikely to be any performance improvement at present because the only user of
VertexBuffer (RenderablePatchWireframe) is creating and destroying the buffer
with each render call. However the code is more compatible with future OpenGL
versions where the only acceptable way to submit geometry is through VBOs.

Note use of offsetof() macro in ArbitraryMeshVertex; may require fix-up on
MSVC.
Fixed crash on Linux due to thread-unsafe write to ConsoleView
Selected patches have visible wireframes from all directions
Renaming and code cleanup
Avoid unnecessary VBO allocations when re-rendering patches

Introduced VertexBuffer::replaceVertexData() which uses glBufferSubData to
replace the VBO's data store with a vector of vertices from another
VertexBuffer of the same size or smaller. A new allocation is only required
when the number of vertices in the patch mesh changes (e.g. after a significant
change in geometry).
Fixed patch wireframe now also using VBO

Introduced new IndexedVertexBuffer which is an index-based parallel to
VertexBuffer (using glDrawElements instead of glDrawArrays). Refactored several
common VBO tasks into separate functions in new render/VBO.h.
Solid patch rendering now using VBOs

- VertexBuffer and IndexedVertexBuffer are now templated on their vertex class,
  rather than forcing the use of ArbitraryMeshVertex. The wireframe patch
  renderables use Vertex3f as their vertex type which should save some GPU
  memory.
- Introduced the VertexTraits templated class which provides access to the
  various offsets for each supported vertex type. Specialisations added for
  Vertex3f and ArbitraryMeshVertex; the VertexBuffer classes can use any vertex
  type for which a VertexTraits specialisation is defined.
- IndexedVertexBuffer sets vertex and attribute pointers based on the
  particular components provided by its vertex type, and an extra boolean
  parameter specifying whether to render in bump-map mode (with custom vertex
  attributes) or regular mode (with glNormalPointer and glTexCoordPointer).