Implementing suggested changes
VS example: -reworked for changes and using a gfm.buffer
buffer.d: -removed _storage member, changed constructor accordingly
program.d: -restored the old link() (removed strings variable)
        -added a property getter for GLAttribute.location
vbo.d:  -VBO and IBO are now gfm.buffer classes
        -removed genericAttribIndex. Attribute locations are NO LONGER
        COMPUTED AUTOMATICALLY
        -use() now takes an optional GLProgram. This GLProgram is passed
        on to the VertexAttrbutes and used
        only when recovering attribute position from name is required.
        -add() function is removed. It's functionality is now
        implemented in addGeneric and addLegacy functions, because the
        two functions are conceptually very different.
        -addLegacy() lets you to add an attribute that uses the old
        glVertex*, glColor*, etc. functions
        -addGeneric() lets you add a generic attribute and assign it a
        fixed position (can be useful if you also assign your attribute
        location in the OpenGL 3.3+ shader) or assign it a name. If a
        name is assigned, the GLProgram passed to use() is used to
        recover attribute location.
        -changed VertexAttribute accordingly.
        -added getVertexSize()
        -removed vboCount and iboCount. They were ugly anyway.
PLEASE TAKE A LOOK AT: should VertexAttribute members private?
(marked the comment as TODO FIXME for easy search of line)