Implement a material cache
Add material reloading (F7 in cheat mode)
Further flesh out shared render state identity