Huge Refactor: Use astnode rather than string to represent types, support syntax like "int a[10]"