Preprocess pretty expressions with str.translate()

This cleans-up the pretty-formatted expression parsing in
pint.util.string_preprocessor() to have less code, be easier to read,
and probably be slightly more performant.

One difficulty was that string.maketrans() does not work for unicode
translations. In Python 3, str.maketrans() does not have this problem.
To support Python 2 we bypass string.maketrans() and instead define our
own simple maketrans() function that builds an appropriate translation
table (dict).