As you can tell from this, I had some problems when I was writing this where I'd either return a CodeFragment where I should return an array, or I'd end up with an sub-array in the middle of my array.  I thought about changing this up so that makeCode() would take any number of arguments, any of which could be strings or CodeFragments or arrays of CodeFragments, and it would just flatten everything.  I stubbornly didn't, because I wanted to get things right.  I do wonder if it would be a good idea to make that change now - since it would make some of this a little simpler - get rid of some concats and pushes here and there - or if it would be a bad idea, because it's less precise and might lead to some weird hard to find bugs.