Move application state out of application env

* Moves application state (that was not configuration or documented) from application env to separate ets tables for Elixir, IEx and Logger.
* Changes how IEx configuration works behind the scenes so that `config_change` causes a merge of config rather than overwrite. This also fixes potential race conditions where two process could configure IEx at the same time. If an application previously abused how IEx used to work behind the scenes it will nolonger work unless setting the config in config.exs when it will work.

Fixes #2779 for those on `1.0`.

Note this does not change Elixir's `ansi_enabled` getting turned to `false` or Logger's runtime configuration resetting on config_change (relup). These should be set in config.exs for a release. If these are set/changed in the config.exs between relups the changes will be reflected when downgrading/upgrading automatically. This is the correct behaviour.

/cc @bitwalker, @scrogson, @chvanikoff