Запилил класс для гибкого сравнения значений. Постарался учесть все случаи для которых не подходит нативное сравнение. Посмотрите пожалуйста - может что-то не учел.
Код класса
По поводу реализации одним классом:
вначале планировал отдельные классы реализующие общий интерфейс для каждого типа/случая и класса-менеджер для управления ими, но в итоге отказался от этого варианта из-за неоправданной сложности реализации.