Presenter::hasFlashSession() & getFlashSession() are separated into MessageStorage service (thanks to Filip Prochazka)
Presenter::storeRequest() & restoreRequest() are separated into RequestStorage service; restoreRequest() redirects to original URL