Label all threads and make sure they are killable

Labeling all threads ensures we can identify them when analyzing a GHC
event log file using ghc-events-analyze.

I also solve the current bug that all threads created by snap are
unkillable when you start the server in a masked state. It is solved by
using:

  forkIOWithUnmask $ \unmask -> unmask ...

so that asynchronous exception can always be delivered to the forked
thread.
Label threads using ByteStrings instead of Strings

This is hopefully more efficient because we avoid going via the
expensive looking withEncodedCString which is used by the standard
labelThread:

http://hackage.haskell.org/package/base-4.6.0.1/docs/src/GHC-Foreign.html#withEncodedCString
Use useAsCString instead of unsafeUseAsCString
Avoid copying the thread label in labelThreadBs
Use a slightly smaller label
Install the 'cleanup' exception handler before unmasking asynchronous exceptions
Be safer against asynchronous exceptions
Make sure that StackOverflows and HeapOverflows are logged
Make thread labeling optional using a CPP define

It's toggle-able using the -flabel-threads cabal flag.
Merge branch '0.9-stable-labeled-unmasked-threads' of git://github.com/basvandijk/snap-server into bas

Conflicts:
	src/Snap/Internal/Http/Server/SimpleBackend.hs
Merge branch 'bas' into 0.9-stable
Fix some quibbles caused by Bas's latest patch, bump version.