Changing how we find sizes and offsets

This will let us support different layouts such as packed, aligned
and once it's added std140. I'm not sure if there's really a clean way
to support std140 though, it looks like it'll just be lots of special
cases for the glm types