Added more specific exception types
Refactor the function call visit.

Introduce a new function called WithNewScopeDo that encapsulate a
callback between scope creation logic.
Added a failing test for inner functions