Box metadata and nodule positioning

This implements #608, positioning nodules on Boxes on the same side as their corresponding node inside the Box. It also provides the foundations for providing further user customisations for Boxes (help strings etc), inching us closer to implementing GiftBoxes.

I did experiment at some length with a much simpler implementation which just read the metadata on-the-fly from the internal node, but it didn't work because the Box Gadget is actually created before all the connections are made, and reordering this sequence either broke undo or complicated the GraphGadget in unpalatable ways. Storing the Metadata explicitly is better anyway I think because it's what we'll need to do when we implement #262, when the user will be able to add new inputs and outputs on the fly, and should be able to choose the location of the nodules arbitrarily.