Initial support for IPv6

Summary of changes:

- Moved ARP stuff from ETHIF to IPV4.  In particular, ETHIF no longer
  has a type called `ipv4addr'.

- Make a new signature IP which is included in both IPV4 and IPV6.  The
  idea is that TCP and UDP should be functors of IP only and should work
  the same way regardless of whether it is an IPV4 or IPV6.

- IPV4 includes IP and should include anything else that only makes
  sense for IPv4 (e.g. the ARP stuff).

- IPV6 includes IP and should include anything else that only makes
  sense for IPv6 (nothing currently).

- Rename `ipv4addr' to `ipaddr' since it should not matter whether it is
  a v4 addr or a v6 addr most of the time.

- Rename TCPV4 to TCP and UDPV4 to UDP.

- STACKV4 is now called STACK (better name anyone?).  Since it would be
  useful to run both IPv4 and IPv6 at the same time, this module now
  contains submodules IPV{4,6}, UDP{4,6}, TCPV{4,6} and associated
  functions & types.

- Removed the function `allocate_frame' from the IP signature.

  In the current IPV4 module this function does two very different
  things: 1) allocates an ethernet frame, and 2) performs address
  resolution.  In order to present an uniform interface for IPV4 and
  IPV6 we believe it is better to separate this two functions.
  Furthermore, there is no need to expose packet allocation (which
  happens in the IP layer) to the higher layers.  Thus we replaced the
  `allocate_frame` and the `write'/`writev' function by a single
  function called `write'/`writev'.  The payload to be transmitted is
  passed as value with type [buffer -> buffer list].  This function
  receives the header of the ethernet frame to be sent and returns the
  whole packet.

- Added a function `checksum' to IP which is used to compute checksums
  by upper-layer protocols such as UDP & TCP.
Add IP signature to V2_LWT.mli
Fix typos
Decouple ARP from ETHIF
Keep `ipaddr` abstract in TCP and UDP
Sync V1 and V2
Update IP signature

- `writev` (removed `write` as it does not seem to make much sense).
- `checksum`
- `input_arpv4`
IPV6: expose add_ipv6
Update IP signature

We revive the `allocate_frame` function as before, but we perform
address resolution in the `write` function.  This is reflected in the
signature of `allocate_frame`, which no longer blocks.
IP: add {set,get}_ip_gateways

This functionality is common among both IPV4 and IPV6.
Merge branch 'master' of git://github.com/nojb/mirage into nojb-master
Reconcile the V1 and V2 interfaces and remove the V2 variants.
bump working version to 2.1.0
fix up the mirage-types META file
Further build fixes to remove V2 references
Replace V1 with V2
Merge branch 'master' of git://github.com/nojb/mirage

Conflicts:
	types/V1.mli
	types/V1_LWT.mli
STACK: fix configuration for IPv4
Rename STACK => NETSTACK
{Udp,Tcp}_direct: fix generated code