[Linter] Cleanup the linter

Part of #48. Changes so far include moving the Result object used by the linter into it's own file and de-duplicating some of the validation running code. I still would like to move all of the attribute validation into it's own class, but this is a start.