Mesh binding according to the shader program needs

### Not ready to merge! Waiting for the review and #27 first.

This PR implements actual shader-mesh binding by matching names. This can be cached (as the next step) with a simple `HashMap` that holds the sequence of attribute indices, but I'd rather have all other matching functionality done first (shader parameters is the major one, and there is also a need to match shader outputs).

I had to put a simple handle management in place, to be replaced by a proper one with #22.

This PR also partially addresses #24, since the biggest roadblock for the strings was `EMPTY_ATTRIBUTE`, which I made irrelevant now. We might be Ok with regular String then, considering the caching we'll do in the future will leave no need to access those Strings at run-time too often.
`self.cache.programs.len()-1` -> `self.cache.programs.len() - 1`