Add simple OOP support

A basic framework for classes with single inheritance is provided in
src/lib/lua/class.lua, which is required by core/main.lua by default.

The new directory src/lib/lua is intended to be used to store common
low-level Lua code.  In that spirit, src/strict.lua has been moved
there as well.
Add utility functions for bitfield manipulation and string splitting to src/core/lib.lua
Add packet prepend/coalesce functionality

core.packet.prepend_iovec() adds a buffer to the front of the iovecs
core.packet.coalesce() attempts to coalesce all buffers into a single one
Add a framework to construct and mainipulate arbitrtary datagrams

The set of classes in src/lib/protocol provide basic mechanisms for
parsing, building and manipulating a hierarchy of protocol headers and
associated payload contained in a data packet.  In particular, it
supports

   * Parsing and in-place manipulation of protocol headers in a
     received packet

   * In-place decapsulation by removing leading protocol headers

   * Adding encapsulation headers to an existing packet

   * Creation of a new packet
Add app for raw socket access to regular network devices

The RawSocket app provided in src/apps/socket can be used to read and
write bare packets from regular network devices.  It can be used to
access NICs for which no native Snabb Switch driver exists.  It can
also facilitate debugging with, e.g., tcpdump, which is not straight
forward to use with the native driver.  The app is not recommended for
handling traffic with high demands on performance.
Add raw socket support to vhost app

RawVhost provides the same functionality as RawSocket but should have
better performance.  However, performance is actually worse :( It
could be worth while to understand why.  Or maybe this is not a useful
thing at all.
Add app that responds to IPv6 neighbor solicitations

The app provides the bare minimum needed for address resolution of
remote hosts on the same subnet.  It filters out NS for a single
pre-defined IPv6 target address and responds with a NA that provides a
pre-defined link-layer address.
Allow a table as argument for an app's initializer

A simple string as argument to an app's new() method makes it
difficult to implement non-trivial configurations.  The downside is
that it's harder to detect when the configuration has changed and the
app needs to be reconfigured.
Add app to implement a L2 tunnel on top of IPv6/GRE
Workaround for multi-buffer packet bug

The intel10g and vhost drivers don't handle multi-buffer packets on
transmit correctly.  vhost also ignores iovec.offset.
Merge pull request #138 from alexandergall/vpnv2

Merged Alex Gall's VPN app and datagram support.