fix #3672, dispatch bug due to type intersection

the improved typeintersect revealed a bunch of ambiguity warnings,
which could be fixed up by improving method specificity a bit, and
manually patching one case.