implemented via @catch_config decorator
Now, the event that was triggered by invalid app config (see `--log-level 5`) is triggered by bad config at any point during initialization.
This *will* catch TraitError bugs in IPython itself, but only during initialization.
base64 encoding functions were called, but had no effect, because
the notebook already has everything as b64-encoded bytestrings, which
are valid ascii literals on Python 2.
However, the encode/decode logic is actually triggered on Python 3, revealing its errors.
This fixes the base64 functions that had no effect to have their intended effect, but does not use them. Rather, it is assumed that
bytes objects are already b64-encoded (and thus ascii-safe), which
assumption was already made in Python 2.