3 lights ( + material and shader injection) implemented and tested on ios, android and rasberrypi

Lot of changes. Please review
You can pretty easily change `setupProgram` to take in a `shared_ptr<ShaderProgram>` and then you won't need to get the raw pointer. (Shared_ptr can behave unexpectedly if you try to manually manage its internal pointer)