Experimental AST Matcher Rules

The primary content of this pull request is to introduce writing rules with Clang AST Matcher. Benefits of writing rules with ASTMatcher are huge:

* Open a new way of thinking when writing rules
* AST matcher rules are more descriptive
* AST matcher rules are easy to write and understand

Some code cleaning and re-design are made along with this pull request.