Expose long hidden bug.

Bug discovered by Alexander Polakov.
We change how putBool works to expose it, making it easier to fix,
lots of tests in the test suite breaks by this change,
but they shouldn't.
putWord8 is broken, as it may let bits we want to be unused leak into
the output. If some high bits are set in a Word8, but we don't want to
output them, they will anyway leak and corrupt previously written bits.
The following program is now broken with this commit;

broken = do
 putBool False
 putBool True

It'll output a byte: 11000000
instead of the expected: 01000000