When checking overrides, compare methods structurally

Because they may come from different copies of the same class from different modules
Minor. If's with the same condition merged
Using strategy instead of BiMap
Minor. Methods reordered
OverridingUtil turned into a singleton
OverridingUtil parameterized with equalityAxioms
Do not compare local classes by FqNames
Checking return value supported in OverridingUtil
Overridability and overloadability checks separated
Support equalityAxioms in isSubtypeOf()
Compare return types when structurally comparing callables
~~ Action for all errors
++ trying to remove unneeded caching in JDR