Emphasis on high level use of the classes and low-level efficiency inside the implementations (GL calls minimized)
IndexBuffer no longer templated and works with 16-bit unsigned shorts for simplicity
IndexBuffer must be provided VertexBuffer when constructed, which will be used to setup for drawing
Same VertexBuffer class can be used for static and dynamic scenarios. For dynamic scenarios public function UpdateBuffer() should be called whenever it's needed to copy data from system memory to GL land. For dynamic scenario it is also recommended to set optional constructor parameter of usage pattern to dynamic write