Fix bug 'parse_optional_int' should return table with token and optional int
Implement lowering 'ether broadcast'

According to the BPF syntax document, ether is optional, so 'broadcast'
is the same as 'ether broadcast'.
Implement lowering 'ether multicast'

According to the BPF syntax document, ether is optional, so 'multicast'
is the same as 'ether multicast'.
Implement lowering 'ether proto <proto>'

protos: ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso,
 stp, ipx, or netbeui. These identifiers are also keywords.
Add doc examples for 'ether multicast', 'ether broadcast' and 'ether proto <proto>'.
Argument of 'ether proto <proto>' and 'ip proto <proto>' could be escaped

About 'ether proto <proto>':

"Protocol can be a number or one of the names ip, ip6, arp, rarp, atalk, aarp,
decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui. Note these
identifiers are also keywords and must be escaped via backslash (\)."

Source: http://biot.com/capstats/bpf.html

The same applies for 'ip proto <proto>'.

However, our parser identifies the context where <proto> is parsed, so
we don't actually need to escape the name of the protocol. In our case,
I think is better to expect an optional escaped sequence ('\\').
Merge pull request #51 from Igalia/fix-parsing-errors

Fix errors in parser
Merge pull request #55 from Igalia/low-ether

Implement several ethernet modifiers
Implement operators 'less' and 'greater'