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;