Refactor the LZ tools and fix BSSReader's eval shenanigans.

re BSSReader: Obviously the correct solution (besides ditching eval) is to occupy the `__builtins__` key. So that all keys can be real constants (i.e. when reversing the dict, as in this case) the dict is instead copied when passed into eval. In retrospect, the `__builtins__` key could just be removed once BSSReader is done.
Consider using `str.format()` instead of `%`.