Prevent conflict between parameter names and local function names.

From section 9.2 (Formal Parameters) of the spec:

  The formal parameter list of a function introduces a new scope known
  as the function's formal parameter scope.  The formal parameter
  scope of a function f is enclosed in the scope where f is declared.

Therefore, if one of the function's parameters has the same name as
the function itself, that isn't a problem.

Previously, we would add a local function to its own formal parameter
scope before visiting it (to allow it to call itself recursively), and
then after visiting it we would add it to the scope of the enclosing
function (so that the enclosing function could call it).

The fix is to add the local function just to the scope of the
enclosing function, and to do it before visiting the local function so
that recursion still works.

BUG=dartbug.com/20074
R=brianwilkerson@google.com

Review URL: https://codereview.chromium.org//688253004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge@41621 260f80e4-7a28-3924-810f-c04153c831b5
Fix for issue 20796

R=paulberry@google.com

Review URL: https://codereview.chromium.org//689383005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge@41622 260f80e4-7a28-3924-810f-c04153c831b5
Clean up references in comments

R=scheglov@google.com

Review URL: https://codereview.chromium.org//708263002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge@41623 260f80e4-7a28-3924-810f-c04153c831b5