indent refactor. closes #141. closes #159.

reduced indent complexity by:

 - keeping indent logic together with hooks (easier to identify what affects
   the indentation and keep things grouped);
 - avoiding magic rules and trying not to be too smart;
Add tests for call expressions, with spaces, tabs and nested custom indent
Add test for chained call expressions with more custom indent

Here the extra indent is used to indicate selection changed caused by the
next() call.