Branch/shader materials

This is not ready, I just wanted to get some eyes on it.

I added an example app at `public/shader-material`.

@eric79 
You'll want to make sure that `updateFunction` goes in as, it comes out the same way.  For example, if it's being set as a string, you'll want it to come back out as a string so that it can serialize (and thus replicate) properly.