Fix. get_dimensionality should look in the dimensionality cache.
Return copy of base_units and dimensionality to avoid changing the cache.
Improved string_preprocessor. Removed 1cm syntax.

The `1cm` syntax (equivalent to `1*cm`) was broken because it
splited valid names such as `Water_60F` into `Water_60*F`.
While restoring this syntax is possible, it has to handle the
exponential notation. In other words, it should not convert
`1e+24` into `1*e+24`.

Additionally:

- Moved non string_preprocessor tests to a new class.
- Added more tests.