Added TutorialNodeVisitor.identifier method

Certain visit_X methods in AST can receive as arguments nodes of different
types.  The Python grammar used by ast defines certain attributes on those
nodes which may differ.

It would be possible to check for the expected type of node at runtime,
but this is kludgey and prone to error.

The TutorialNodeVisitor.identifier method extracts the identifier from a
given node, if possible.  It does this using the grammar definition.  If
an identifier cannot be extracted, a StaticAnalysisError is raised.  This
is appropriate, as all attempts to extract the identifier of a node with
no identifier is by definition a static analysis error, not an error in
the student code.

This should be used when implementing #15
Deleted old .tut file for recursive_digits2
Added TutorialNodeVisitor.involved_identifiers method

It's often necessary to check if a student has used a particular
identifier in a particular context.

Depending on the type of node, this can be quite an involved process.
For example, a student might write extremely convoluted if statements,
where we expect only a simple one.

TutorialNodeVisitor.involved_identifiers will recursively determine all
identifiers which have been used in a statement.

So, for example, if the student writes this statement:

    if x > 3 and (y or z < 4):
        pass

then TutorialNodeVisitor.involved_identifiers in the context of the if
statement (ie visit_If) will return:

    ['x', 'y', 'z']

even though the tree itself is extremely complex.

The order of identifiers is undefined, but will broadly be depth-first.

This will be useful in implementing #15
Fixed errors to be independent
Added recursive_digits2.tut

Note that the tester currently doesn't play nice with recursive functions.