indent refactor once again

my idea is to implement the indent logic together with the hooks, that way we make things more explicit and avoid all the crazy rules that we had before.

this looks promising but will take some trial and error to "get it right".

will keep this PR open so that everyone can follow the progress and also so we get feedback from the travis builds.

fixes #141

### TODO:

- [x] fix all the failing tests;
- [x] update all the hooks to export a regular object and not a single function (`module.format` and `module.getIndentEdges`);
- [x] clean up the `indent.js` file;
- [x] clean up all the `getIndentEdges` (some cases can be simplified and/or be more robust now that we have a smarter indent start logic);