Add Functor and Applicative instances for SetM...

... to get ready for AMP proposal in GHC 7.10 and silence warning
in GHC 7.8.
Use finiteBitSize with base >= 4.7...

... and silence warning in GHC 7.8.
Rename join to link ...

... to get ready for AMP in GHC 7.10 and silence warning in GHC 7.8.

Keeping join would be quite a hassle. We need to silence warning in GHC
7.8, but we cannot say
  import Prelude hiding (....., join)
because join is not exported untiil 7.10. We also do not want to
explicitly list imported names from Prelude, because there are many
(I tried and stopped after a dozen).

We could silence the amp warning in GHC 7.7 - GHC 7.9 and have
conditional Prelude import for base >= 4.8, hiding join in one of them.
Nevertheless, this is too many problems compared to renaming an internal
join function to link.
Avoid dependency on Applicative (ST s) instance ...

... present only in GHC 7.2+.