Metadata uses better nested format for deserialization

Instead of looking up strings and all, serial_format is stored as
a list of (name, format) tuples where format is either a format string
that bitstring can understand, or a class that is also registered with
the serializer.  This way any walk can just check if the format is
registered with the serializer, and if so make a recursive call.