A Constraint-Based Approach To Name Binding And Type Checking Using Scope Graphs