Apply partial loop-unrolling to avoid trace aborts

The JIT compiler has to unroll inner loops in a trace.  It does this
up to a (configurable) limit and aborts the trace if it hits that
limit.

This commit tries to avoid excessive unroll operations by manually
unrolling a few iterations in critical code sections like multi-buffer
receive and transmit processing.  This significantly reduces trace
aborts in the case of, for example, encapsulation operations that
typically use two buffers per packet.  It should not have any negative
impact on single-buffer packets.

The commit also includes a few deliberate preventions of tailcalls to
avoid an effect discussed in the thread at
http://www.freelists.org/post/luajit/FFI-methods-for-userdata-objects,3
Intel10g: set and reset rates and priority
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.
copies read string into struct instead of hoping it will stay long enough to use a cast pointer
Merge pull request #238 from alexandergall/loop-unroll

Apply partial loop-unrolling to avoid trace aborts
Merge pull request #239 from javierguerragiraldez/priority

Intel10g: set and reset rates and priority
Merge pull request #244 from javierguerragiraldez/master

lib.pcap.lua: replace ffi.cast() from a local string with ffi.copy()
Merge pull request #242 from alexandergall/datagram-new

Partial IPv6 neighbor discovery and various performance tweaks