Added per-object material uniforms

My proposal for #4841

This allows objects to define uniforms which are synchronized to the material when rendering. Multiple objects can then share the same material while having distinct properties. 
E.g. 
```
mesh = new THREE.Mesh( geometry, material );
mesh.materialUniforms = { diffuse: new THREE.Color('red'), }

mesh2 = new THREE.Mesh( geometry, material );
mesh2.materialUniforms = { diffuse: new THREE.Color('blue'), }

```