UniqSupply: Overhaul mkSplitUniqSupply

* The function is now split into two: the tiny part that should be
  inlined at its call sites for constant-propagation purposes, and the
  rest of the function that should not be considered for inlining.

* Rewrote the function to use do-notation.

* Instead of allocating one Unique per call to genSym, the function now
  preallocates 10 Uniques at a time, thereby reducing the amount of
  relatively expensive calls to genSym and noDuplicate# by a factor of
  10 or so. The drawback is that, on average, 5 Uniques will be
  discarded every time a UniqSupply is split.

TODO: Define an atomic add function in the RTS instead of using the
atomic compiler primitive.
TODO: Merge with previous commit.