[launcherlib] Handle failures of resolving main() dynamically

In case where the binary to be invoked is either not a shared library
object (e.g. it's a shell script) or when main() cannot be resolved
as shared library (because it hasn't been exported as such), instead
of abort()ing due to an uncaught exception, handle the exception and
print the error message in the log + on the console, and then fail.
Merge pull request #21 from thp/handle-runtime-errors

[launcherlib] Handle failures of resolving main() dynamically