The basic underlying abstraction for this message-format layer is the
element, which is defined by its type, bit offset and bit length.

Possible types are unsigned integer, signed integer, float, double
and long (the last 3 are actually identical, and always 32 bits long).

Due to Java restrictions, 64-bit unsigned integer types do not work
properly (but avr-gcc doesn't support integers greater than 32 bits
anyway...).

Fields represent one (simple fields) or more (array fields) elements.
A field has a name, and:

for simple fields: an element specification

for array fields: 
  an n-dimensional array specification
     offset, bitsize and arraysize for each dim
  an element specification

  array field f[i[1], ..., i[n]] is found at offset
    sum(j = 1 .. n, offset[j] + i[j] * bitsize[j]) + element offset

