Adds support for:
+ Unsafe casting
+ non-inline if statements
+ function calls
+ preprocessor conditions
+ runtime type checks
+ class inheritance
And improves the granularity of identifier selection via the
new attributes node (idea copied from [python's tree sitter](https://github.com/atom/language-python/blob/master/grammars/tree-sitter-python.cson))
This makes a few breaking changes, notible that most places where
identifier nodes were expected now have attribute nodes instead,
and that the existing attribute node was renamed to "metadata" to
be more accurate.