Added decoder functionality for all data units (except ArpSegment) and
corresponding unit tests.
Added ProtocolIdentifier interface for enums that encapsulate different
protocols to get a decoder for the protocol that they are identifying.
Made RawDataUnit a ProtocolDataUnit because ProtocolIdentifier only
refers to PDUs (it wouldn't make sense to make a protocol identifier to
refer to a data unit like Ip4Address or MacAddress) and RawDataUnit is
needed for unknown protocol types.
Adapted EthernetFrame test and ArpSegment test as there was a failure
with gradle when using the Unknown EtherType