Add new typeclass, Reducible

This defines a typeclass `Reducible` which allows us to "reduce" pandoc
Inlines and Blocks, like so

    Emph [Strong [Str "foo", Space]] <++> Strong [Emph [Str "bar"]], Str
"baz"] =
        [Strong [Emph [Str "foo", Space, Str "bar"], Space, Str "baz"]]

So adjacent formattings and strings are appropriately grouped.

Another set of operators for `(Reducible a) => (Many a)` are also
included.
Move some of the clean-up logic into List module.

This will allow us to get rid of more general functions we no longer need in
the main reader.
Use Reducible in docx reader.

This cleans up them implementation, and cuts down on tree-walking.
Anecdotally, I've seen about a 3-fold speedup.
Add Reducible to cabal file.
Add test for correctly trimming spaces in formatting.

This used to be fixed in the tree-walking. We need to make sure we're doing it
right now.
Merge pull request #1366 from jkr/reducible3

Docx rewrite and cleanup (in terms of Reducible typeclass)