Introduce CompletionTarget to take the place of the Node being completed.

Instead of locating the node containing the cursor offset using a
NodeLocator, identify the edge in the parse tree which will be
displaced or modified by the completion proposal.  This reduces the
number of cases that need to be handled in the _OpTypeAstVisitor, and
avoids the need for the _OpTypeAstVisitor to consider character
offsets in nearly all cases.

R=danrubel@google.com

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

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