Reentrant, non-mutating vt.composite

This changes makes it safe to pass VTs into vt.composite that have not been previously parsed that might be shared instances that are actively being used/rendered from other threads.