Fix parsing of IPv6 addresses

    * Sometimes IPv6 addresses are mixed up as MAC addresses due to
    inspecting only the first one or two octets. If the parsing of an IPv6
    address fails due to being parsed as MAC address, fallback to IPv6
    parsing.

    * Support simplified IPv6 addresses:

       - ::1         === 0000:0000:0000:0000:0000:0000:0000:0001.
       - 1::         === 0001:0000:0000:0000:0000:0000:0000:0000.
       - 1::1        === 0001:0000:0000:0000:0000:0000:0000:0001.
       - ff:ff:ff::1 === 00ff:00ff:00ff:0000:0000:0000:0000:0001.
Improve parsing of IPv6 with mask addresses

- Extend function 'check_non_network_bits_in_addr' to work with IPv6
  addresses.
- IPv6/mask is not valid syntax, only IPv6/len should be supported.
- Add more tests.
Implement lowering of 'host' and 'net' for IPv6 addresses
Lower "not" to "if"

* src/pf/expand.lua (expand_bool): Expand "not" into "if".
* src/pf/codegen.lua (compile_bool): Remove "not" codegen case.
* src/pf/optimize.lua (simplify, simplify_if, cfold, infer_ranges):
  Remove "not" cases.  Add a case for a "not"-like "if" in test
  position.
Merge pull request #50 from Igalia/wip-not

Lower "not" to "if"
Added gmtime_usecs, to allow usec-level access to the system clock for pseudorandom seeds
Changed gmtime_usecs to gmtime, to match more general conventions
Assert that range folding does not fold to Inf
Fix syntax error in generated code found by pflua-quickcheck

* src/pf/codegen.lua (filter_builder): It's not guaranteed that we're at
  the end of a block when returning true or false, when the continuation
  is ACCEPT or REJECT, so surround those returns in a do block.
Add initial range for "len"

* src/pf/optimize.lua: The range of 'len' is 0 to 65535.
Fix "not" codegen

* src/pf/codegen.lua (filter_builder): Fix code generation for "not".
Fix bug in which subtraction turns into a comment

* src/pf/codegen.lua (compile_value): Put spaces around binary
  operators, so as to avoid the amazing bug in which a binary "-" gets
  fused with the initial minus on negative numbers resulting in a
  comment instead of subtraction.
Merge pull request #48 from Igalia/implement-host-and-net-ipv6

Implement lowering of 'host' and 'net' for IPv6
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 ('\\').
Fix bug 'parse_optional_int' should return table with token and optional int
Implement lowering '[src|dst] port <port-number>'
Implement lowering '[src|dst] portrange <portrange>'
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>'

Any <proto> in 'ether proto <proto>' can work as a single keyword. For
instance:

'ether proto decnet' === 'decnet'