Add a check method to handle static failures

The parse method on the hopper module has been removed in favour of a
check method, which performs both a parse and runs the dialect checker
if it exists. The outcome is either an object with information on where
the error occurred (if such information has been provided by the
original error) or the parsed AST if no error occurs. The interpret and
module methods will now also accept a pre-parsed AST, allowing a
two-step process of checking a module and then running it later without
re-parsing and checking it again.

The internal checking logic has been simplified, and a spelling mistake
on the nodeOrIfAbsent method resolved. Parse Errors have been renamed to
Parse Failures, to match with the naming scheme of other errors.