refactored Markdown class to use traits

all markdown features are now in a trait so composing new markdown
flavors is as simple as adding traits to the class.

Additionally this adds an abstract syntax tree.

This should enable the following things:

- make it easier to get in line with common mark #62
- allow implementing #28 easily using the absy and dropping/escaping all html.
- [x] should fix  #53 because the abstract syntax is generated for the complete language before any reference is accessed. Need a test for that
- [x] apply the changes to GithubMarkdown
- [x] apply changes to MarkdownExtra
- [x] fix test breaks
- [x] update docs