Fix parsing of operators 'tcp' and 'udp'

This patch fixes issue #15.
Looking good.  I wonder, can we refactor a little bit more:

local function ipv4_src_portrange(lo, hi) return ... end
local function ipv4_dst_portrange(lo, hi) return ... end
local funciton ipv6_src_portrange...
local funciton ipv6_dst_portrange...
local function ipv4_portrange(lo, hi) return { or ipv4_src_portrange(lo,hi) ipv4_dst_portrange(lo,hi) end
local funciton ipv6_portrange...
local function expand_portrange() ... { if ip then ipv4_portrange() else ipv6_portrange() }
local function expand_tcp_portrange() ... { if ip then has_ipv4_proto(tcp) and ipv4_portrange() else ... }

WDYT?