Make `ensure` linear.
Make `ensure` linear.

Try the following:

```
$ stack ghci cereal:lib
> import Data.Monoid ((<>))
> import qualified Data.ByteString as BS
> import qualified Data.ByteString.Lazy as BSL
> let bs = encodeLazy  (1000 * 1000 * 100 :: Int) <> BSL.fromChunks (replicate (1000 * 1000) (BS.replicate 100 0))
> either (error "Could not decode") BSL.length (decodeLazy bs)
```

Without this commit, you're going to wait a long, long time.

fpco/fpco-cereal,fpco/fpco-cereal