Allow relocation of protocol header data

The header:copy() method of the protocol base class now takes an
additional argument "relocate", which, when set to true, will first
copy the header to the new location and then make it the active
storage of the header such that future manipulations will be reflected
in the new location.
New semantics for datagram class

The push() method now appends headers to the beginning of the packet
buffer of iovec #0.  This simplifies the contruction of packets and
avoids unnecessary buffer allocations if different apps push to the
same packet.  However, this change is incompatible to the previous
version.

All parse methods are now also available for datagrams created from
scratch to make the API more consistent and to avoid checks for
special cases.

A new constructor reuse() allows re-using an instance without putting
it on the freelist first.
Adapt apps to new datagram push() semantics
Partial implementation of IPv6 Neighbor Discovery

A new app nd_light provides rudimentary support for address resolution
of a pre-configured "next-hop" address.  Once the MAC address has been
found, it is used for the lifetime of the process.
Merge pull request #242 from alexandergall/datagram-new

Partial IPv6 neighbor discovery and various performance tweaks