Fix ehost parsing

The regex that checks if an address is an IPv6 address matched MAC
addresses, as a MAC address also starts with two octets.

I added a regex for matching MAC address before the IPv6 match.

In addition to that, MAC addresses can have the second octet of
a segment missing, that means this is a valid MAC address:

f:f:f:3:3:3

Which is the equivalent to f0:f0:f0:30:30:30. I modify the lexer to match
those addresses too.
Add expansion of 'ether [src|dst] [host] <ehost>'
Expand '[src|dst] net <net>'
Refactorize expansion functions of several operators.

Keywords 'ip', 'arp', 'rarp' and 'net' share some common code depending on
whether they are 'src' or 'dst' that can be refactored into a more general
parametrized function.
Implement expansion of 'net <net> mask <netmask>'