--[[
	deviation: In all of the following toThrow functions,
	we have checks to see if we captured an internal error.
	We need to do this because we are returning an error/table
	every time from our error handler but we don't always want to treat the
	result as having thrown an Error. i.e. we don't want to treat error('simple')
	as error(Error('simple'))
]]