Dissallow 3 component vectors for ALLEGRO_PRIM_TEX_COORD. Be assertive about invalid storage values.
Check that the vertex declaration is valid before creating it.

This is necessary for OpenGL, as it doesn't verify it until it is used for drawing.
Centralize the conversion between ALLEGRO_PRIM_STORAGE and the OpenGL variables.
Document the restriction on storage for ALLEGRO_PRIM_POSITION
Add a whole bunch of new ALLEGRO_PRIM_STORAGE values.

The weird list comes from the union of the supported storage values from the D3D side and from the OpenGL side.

Only implemented for OpenGL for now.
Expand a bit in the documentation on why you might want to use one storage vs another.