BREAKING CHANGES
vbo.d:
        -renamed VertexElement into VertexAttribute for clarity
        -added a new Role: GENERIC
        -useOlderAttribFunctions is not needed anymore and the user can
            freely mix older functions with glVertexAttrib* ones
        -state can now only be "USED" or "UNUSED"
        -added VBO and IBO properties the the VertexSpecification class:
            if the user sets a VBO or IBO, they will be automatically
            bound and unbound from the current state when use/unuse is called
program.d:
        -when linking, ad optional array of strings is taken as input.
            Every string in the array should correspond the name of a
            generic attribute used in the program's shaders.
            This allows simpler usage of attributes from the
            VertexSpecification class.
minor changes to comments:
git messed up a few things so those went lost in the process.
Added example of VertexSpecification usage
Should work just fine, give it a check because you never know
One last small changes to improve usability
Let the user store the count of elements or vertices that should be
rendered
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)
Example refactoring and improvements:

the example is now a bit more clear, and shows a new way of passing
attributes to the shaders
Merge pull request #49 from francesco-cattoglio/master

Merged!