replace indent logic with esindent. closes #96

esindent uses a simpler and more reliable algorithm for the indentation and
avoids most of the issues that we had with the old implementation.

this will also make it way simpler to maintain the project in the long run
since the concerns are divided into separate packages; fostering code reuse and
simplifying a lot the overall code base.