Simplify how functags work.

The way functags work is insanely odd. My fault, as usual. The old scheme was to generate a hidden tag based on the index of the public function (like "$Func!10"). `matchtag()` then recovered the tagname, parsed out this index, recovered the compiler symbol matching that index, and finally used some crazy logic to compare the symbol to a funcenum.

The new system is a lot simpler. When the compiler sees a function symbol being used as a value, it creates a hidden tag again - but this time, the tag is an actual funcenum. Now `matchtag()` can look up both the left and right-hand funcenums very easily and do a much simpler comparison.

The new intrinsic funcenums can only have one functag.