poset: Remove IncoherentInstances and define our own Ord class.
The "every Ord is a Poset" logic turned out to cause major problems when
trying to define instances of a class such as
class Poset a => Fooable a.
The result was that the type checker still tried to find an Ord instance
even when a Poset instance was available.
So we flip the logic around and create our own Ord class, then say
"Every instance of Ord is an instance of Prelude.Ord". This means we
need to manually add Poset instances for everything, but it should solve
most issues.