tests: add decapsulate test to run
decode: represent a packet as a tuple

The value returned by decapsulate/1,2 is a list of records with a
trailing binary. Clean up the representation of a packet by using:

    {Headers, Payload}

Where Headers consists of a list of Erlang records for each protocol
header and payload is a binary.

The protocol codecs also return a tuple:

    {Header, Payload}

Where Header is an Erlang record. This means the possible
representations of a packet are:

    {#ether{}, binary()}
    {[#ether{}], binary()} % identical
    {[], binary()} % a payload without a protocol header