Refactorings to the filter code, most notably:
- Improve function names: parse_filter_file -> load_filter_file and
parse_rule -> load_filter_str (to make the similarity clearer, since
it /can/ load multiple rules when MATCHFLG_WORD_SPLIT is specified).
- In preparation for rule prefixes containing information beyond the
mflags, change the code to pass around a full "template" filter_struct
instead of just mflags. Callers of load_filter_{str,file} that want
to specify only mflags can use filter_template(mflags) .
- Remove the MODIFIERS_* strings and instead hand-code the condition
under which each modifier is valid. This should make it easier to
see that the conditions are correct.
- Tighten up default modifiers on merge rules:
- Disallow "!" because it isn't useful.
- If the merge rule specifies a side via "s" or "r", the rules in the
file cannot also specify a side via "s", "r", "hide", etc.