Allow ComposeWidget to be created through a purpose-specific static API

Gui::ComposeWidget:
* provide static methods for creating a ComposeWidget for each of
the purposes, viz blank composer, from a draft, from a url, as a
reply.
* make the constructor private
* make methods like loadDraft() and setResponseData() act as
private helpers for setting up ComposeWidget for the required
purpose.
* provide a helper for creating these widgets that can catch a nullptr
for a ComposeWidget reference and throw a warning message to the user.

Gui::MainWindow:
* remove the invokeComposeDialog method as ComposeWidget can be
created using the static, convenient, purpose-based API.
* provide a MSAFactory object through the public API for users
creating ComposeWidget instances
* provide a getter for m_settings

REVIEW: 118910
Stop reconnect attempts for an unconfigured account

If the account is unconfigured, in case of a fresh profile, or starting
Trojita for the first time (without a previous config), there is no need
to try reconnecting to the server.

BUG: 337671
REVIEW: 119536
Updating credits for Jai