New refactoring type

A pair of functions, one for analysis the other for transform. Goal is
to rely on this to get a better way of combining refactorings
Combine refactorings by interleaving them

Changed AddArgument to interleave refactorings in this way
Rename returns a refactoring
Parametrise NewRefactoring on input and output args

Most just use unit for now
Improve refactor to take and return arguments

No longer needs a refactoring of input type unit, and now returns the
output of the refactoring to avoid a second call
Update tests to work with new refactor
Analysis for interleaved refactorings
Make rename return updated declarationIdenifier

With test
Remove a TODO
Change Rename's type annotations to make it clearer
Rename should take an identifier as input, not as output

Eventually, might do both, but I only need it on the input
Put updateIdentifier back, in CodeTransforms
Make AddArgument use sequence

This requires that transforms return a list of changes AND the source to
carry the changes out on.
Make ExtractFunction use new refactorings

The identifier that should be output from ExtractTempFunction is not yet
correct
Make ExtractFunction work with sequencing

CreateFunction and CreateDefinition now insert their creations into some
source code, so they can be interleaved by ExtractTempFunction.

Templates are just annoying should probably be removed.