Replaced run_student_code with run_in_student_context

StudentTestCase.run_in_student_context will take a function object and
execute it in the context of the student code.

This is intended to be used for obtaining test results.  The output of the
function will be returned.

Functions can contain arbitrary code, eg:

    def test_things(self):
        def _get_results(self):
	    first_result = dec2base(10, 10)
	    second_result = dec2base(9, 2)

	    return first_result, second_result

	result = self.run_in_student_context(_get_results)

Because functions are run in the context of the student code, they may
reference any object which is (or should be) defined in that code.  The
flip side of that is that they *cannot* reference objects defined in the
local scope (IRRESPECTIVE OF THE USUAL CLOSURE RULES).

See #25 for more discussion on this.

This commit also updates recursive_digits2.tut to use the new approach,
but not any of the other tutorial problems.
Updated fun1.tut to new test format
Added note regarding removing student_function_name

This should be considered a TODO on #25

Because we no longer extract the student function, there's actually no
need to know about its name.  It can therefore be removed from tester.py
(and I will do so soon).

However, keeping the variable in the config file may still be useful, as
it enables the useful anlysis result of 'you haven't actually defined that
function, silly'.

Unsure whether that's worth the added screwing around, though.
Locals now properly override globals
Added class_rect.tut in new format

Tests are still WIP, but commit is stable
Finalised class_rect.tut tests

The description for this problem will still need to be updated (eg to
remove examples, per #24).
Updated list2.tut to use .run_in_student_context
Merge pull request #27 from CSSE1001/tests_framework

Added new tests framework (which runs arbitrary code in the student's context) and updated tutorial problems.