Add denormalized structure builder

Useful for writing tests or manually creating structures.  It's
typically easier to hand write a denormalized model than it is to
write a normalized model, at least for simple cases (as is common
in tests).

cc @danielgtaylor @kyleknap 
I've added a docstring for this class now.  You are correct, we're using this to guarantee unique shape names.