Move Errors into their own file and invoke them as constructors, this should provide more flexibility when we switch to error collecting instead of aborting on the first error