Add forgotten GHC >= 7.0 condition in (!).

The INLINABLE pragma works only for GHC >= 7.0 and generates
warning for older compilers.
Improve programming documentation.

Move important programming comments to the beginning of the source file,
give them names and refer to the from the source code where necessarry.
Reorder the data constructors of Map and Set.

The order of constructors has clearly no effect on corectness.

Inspired by the change in order of constructors of IntMap and IntSet,
the benchmark shows slight improvement when changing the data
constructors from Tip | Bin to Bin | Tip.

Also, we now consistently use the same order of constructors in all
these structures: Map, Set, IntMap, IntSet.
Improve query functions of IntMap and IntSet.

As documented in the Note: Local 'go' functions and capturing,
it is safe to use captured key argument in query functions.

Also, in order to decrease allocation, the query functions in IntMap
are manually inlined, so 'member' does not have to call 'lookup'
and heap-allocate 'Just a'.

Tests of query functions are much improved too.
Inline Int{Map,Set}.{null, empty, singleton}.

These are probably inlined anyway, but we explicitly INLINE
them in Map and Set, so we do also in IntMap and IntSet for consistency.
Add empty line between Notes.
Prevent multiple warnings.

Prevent multiple warnings caused by unsuccessful SpecConstr pass.
We do so by not inlining helper testing function.
Insert missing space in an error message.
Improve query functions of Map and Set.

As documented in the Note: Local 'go' functions and capturing,
it is safe to use captured key argument in query functions.

Also, in order to decrease allocation, the query functions in Map
are manually inlined, so 'member' does not have to call 'lookup'
and heap-allocate 'Just a'.

Tests of query functions are much improved too.
Improve Map indexing functions.

* Manually inline findIndex and deleteAt to avoid allocation.

* Give type to local 'go' function of findIndex and lookupIndex
  to avoid heap allocation.
Improve heap-allocation by adding explicit type signatures.

When a local 'go' function is using methods from Ord dictionary,
this dictionary is heap-allocated at the entry to the outer function.
If it is given explicit type mentioning the Ord class, the dictionary is
passed on the stack, decreasing heap allocation.
Remove obsolete comment about deleteWith.

DeleteWith is no longer method of any collection.
Inline {Map,Set}.fold* when 2 arguments are given.

Inlining folds when 2 arguments are given is consistent
with Prelude.foldr and {IntMap,IntSeT}.fold*.
Manually inline {Map,IntMap}.map.
Move SetOperations benchmark to its own subdirectory.

Also improve the infrastructure to handle benchmarks in different
subdirectories.
Fix warnings.
Add benchmark of lookupGE to choose best implementation.

Most of the code is by Twan van Laarhoven, thanks.
Change INLINE to INLINABLE on methods using Ord.

As mentioned previously, INLINE - INLINABLE method chain does not result
in specialization, it has to be INLINABLE - INLINABLE.
Change ASCII character for underline from ^ to ~.

We use the following:
  -- [Note: Some superimportant message]
  -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Unfortunately, -- ^ is wrongly picked up by Haddock.
Instead we now use
  -- [Note: Some superimportant message]
  -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Improve one of the benchmarked methods: lookupGE4.