Explicitly state type of source

To avoid errors when constructing IdentifierScope
Add a FindExpressionAtRange function

Which uses the already implemented TryFindExpressionAtRange
Make ExtractFunction use IdentifierScope

Also added an ExpressionScope which can be used for ScopeTrees which
don't just declare identifiers.
Use IdentifierScope.FindReferences in AddArgument