Implement symbolic constants

Symbolic constants like icmp-echoreply et al are not currently supported, and should be implemented.

Note that there are two kinds of symbolic constant, AIUI: symbolic constants in arithmetic expressions, where they just evaluate to a value, and symbolic constants in logical operators, e.g. port http.  Perhaps symbolic constants are only valid in some operators (like "port").  Some investigation is needed.
Use local component, pos = str:match("^([%w]+)-()", pos)