Refactor CLI and logging infrastructure

The method by which `haml-lint` exited with various status codes was
messy.

This monolithic commit changes the `CLI` class to simply return an
integer representing the exit status. In the process, some of the
options handling was reworked into a separate `Options` class, and a new
`Report` class was created to carry information about a lint run.

This has the effect of decoupling the `Runner` from the `CLI` (which
were rather tightly coupled before).

This doesn't change the behavior of the CLI as seen by external tools.

Change-Id: I594ad682e39cfad7ca36a31a9dae6ea839cc9f2e
Reviewed-on: http://gerrit.causes.com/40423
Reviewed-by: Shane da Silva <shane.dasilva@brigade.com>
Tested-by: Shane da Silva <shane.dasilva@brigade.com>
Nest specs under spec/haml_lint

This is the more conventional location for gem specs.

Change-Id: I49e1d167fc86f293272ce4fe39c7e3ce5323e189
Reviewed-on: http://gerrit.causes.com/40424
Reviewed-by: Shane da Silva <shane.dasilva@brigade.com>
Tested-by: Shane da Silva <shane.dasilva@brigade.com>