usage of std::function to replace SolveExceptions()

...id)const function

implement FatalError::AsErrorCode() to bind the ErrorCodes closer to the exceptions, which saves some lines of code too

Todo:
- make WiflyControl::FwSend() const, when using FwRequest as a parameter so we can use our new WiflyControlNoThrow::Try() for the firmware functions too. Else we had to writte an overloader Try() for that purpose
- add some overloades to Try() to support other functions with different parameters, research if va_args or variadic templates can help here