Major refactoring
Add downcasting
Add Function and some Function methods
Auto discover binding modules
Explicitly declare class name when registering classes
Fix duplicated semicolon
Add binding util for iterator to list
Start to work on IRBuilder