Add opaque endiannes types.

You can declare variables of these types and they will maintain
storage endianness regardless of machine native endian. This is helpful
for example in network protocols where buffers are often big-endian.