Improve BuiltIn.Evaluate error messages

For issue #1795 - improve error messages for empty/nonstring expressions
Yes, using `except:` here and in many other places in Robot code base is intentional. The reason is that Java based exceptions are not based on `Exception` and thus go through `except Exception:`. The problem with plain `except:` is that it catches also `SystemExit` and `KeyboardInterrupt`, but this is handled by `utils.get_error_message/details` that reraises them and that ought to be used everywhere where plain `except:` is used.