Performance improvement by about a factor of 3
  - Avoid certain ffi.typeof() operations for pointer types in the main loop
  - Avoid require() in header:upper_layer() method
  - Major change of semantics of the datagram:push() method avoids expensive
    cloning of protocol objects without loss of functionality