Simplified the Transform usage in the gpu::api

- no more pointers, just values. Improved the Transform by compressing the memory footprint
- Re factoring the input stage cache into the GLBackend::InputStageState  struct just like TransformStageState
Does not block the merge but I'm wondering:  Why typedef T to Data? It seems to obfuscate this line:

Cache<T>(const Data& data) : _data(data) {}

The above seems slightly less clear than how it would have appeared otherwise:

Cache<T>(const T& data) : _data(data) {}