memory-stack: fix sub-stack iteration

This fixes how we iterate the sub-stacks when we are looking for an
existing sub-stack that's large enough for the requested allocation
size. The code wasn't correctly adapted previously to consider that
RutLists are circular and so we need to make sure we stop iteration at
the true head of the list instead of looping back around to the current
sub-stack. This bug meant we would sometimes re-allocated sub-stacks
before the stack had been rewound.

Additionally this also changes the code to use for_each_safe when
freeing a stack since we will otherwise be accessing the list_node of
each freed sub-stack which may contain junk.
load-save: Change to use binary protocol buffer format

This adds support for loading and saving UIs using the binary protocol
buffer format instead of xml.

Since we are aiming to use the protocol buffer format for our slave
device networking protocol it makes sense to only maintain one
serialization scheme.

The protocol buffer format should also be considerably faster to parse
than an XML file so this should also help to optimize application load
times.

For reference it's possible to dump the binary format into a human
readable form by running:

  $ protoc-c --decode=rig.UI rig.proto < binary-ui.rig

If you were to modify the human readable format then you convert to a
binary form by running:

  $ protoc-c --encode=rig.UI rig.proto < text-ui.rig > binary-ui.rig

For initial compatibility this patch preserves the xml file loading
and saving, though the plan is to remove xml file saving shortly after
landing this and only keep the xml file loading code for one release,
so we have a chance to convert any existing files we have.
load-save: strip out xml save support

All xml format ui files can now be loaded and re-saved in the binary
protocol buffer format so there is no need to keep the ability to save
xml format files too.
load-save: split out xml loading code

This splits out all the xml loading code since the plan is to drop this
code for the next release so it's nice to move it out of the way in the
mean time.