Fix app exit code logic

We now use +merge to create a single exit code from several other signals: three which are created on catching an error from the config, auth, or sync signals; and one which returns 0 on completion of the sync signal.

Not 100% sure if this is right, and I bet @andrewsardone can make it cleaner, even if this is correct.