apply_tag_ops(tags, ops) where tags is a set of strings and ops is a list of (action, tag) tuples with action "add" or "remove". Removing a tag that is not present must not raise an error. Return the final set.apply_tag_ops({'new'}, [('add', 'sale'), ('remove', 'old'), ('remove', 'new')]){'sale'}'old' is absent but removing it is a silent no-op.
set.discard() removes without raising; set.remove() raises.
Loop over the ops and dispatch on the action string.