Convert error object to string in output_spec

Update output_spec to an convert error object to string in case it is
not already a string. In such a case, the object should be a table with
the __tostring metamethod defined, making it convertible to a string.
Fix argument count in has_error()

The argument count was not being set in has_error(), causing an error to
be thrown in 'say'.

The following assertion check:

	assert.has_error(function() end)

would throw an error with the following message and stack trace:

	say/init.lua:46: bad argument #2 to 'format' (no value)

	stack traceback:
		say/init.lua:46: in function 's'
		luassert/assert.lua:60: in function 'error'

This error occurs because arguments.n is never set in has_error().
Fix error message when no error is caught

When has_error() fails, the error message is misleading, implying that
an error was thrown, but did not match what was expected, yet 'Caught'
and 'Expected' both match each other.

The following failure:

	assert.has_error(function() end)

produces the following error message:

	Expected a different error.
	Caught:
	(nil)
	Expected:
	(nil)

Update the error message to more accurately describe the error, showing:

	Expected a different error.
	Caught:
	(no error)
	Expected:
	(error)

This way, it is a bit clearer that no error was thrown/caught, while an
error was expected. If an expected error message is provided, that error
message will be displayed instead of '(error)'. If the function being
tested calls error(), with no arguments, the caught message will display
'(nil)' instead of '(no error)', since 'nil' is a valid error object.