Run Rubocop directly instead of via CLI

A problem with shelling out to call `rubocop` via CLI is that we have to
pay the startup penalty for both the `haml-lint` Ruby process as well as
`rubocop`'s Ruby process. Furthermore, if we're linting a large number
of HAML files we pay the cost of starting up the `rubocop` process for
each file, which results in linting being very slow.

A solution is to invoke the Rubocop engine directly so we can reuse it
across multiple files. This also ends up simplifying the lint detection
code as we can simply take a Rubocop `Offence` and transform it into a
`Lint` without needing to do any string parsing. It also makes it easier
for us to define which `Cop`s should be ignored as we can reference them
by name rather than inferring them by matching against a regex.

Change-Id: I7b5797534b2e6c99ec57cd1b6f5620dd4142a19e
Reviewed-on: https://gerrit.causes.com/28450
Tested-by: Shane da Silva <shane@causes.com>
Reviewed-by: Greg Hurrell <greg@causes.com>