Replace all uses of static variables with local variables.

To determine whether the current call is the original call to the method
or a self-induced call we used the state of an (initialized) static
variable. Now we will instead take advantage of the fact that the return
address on the stack is always initialized when a method is invoked. If
the return address on the stack equals post_trampoline that means it is
the self-induced call. Otherwise it is the original call and therefore
we should record the return address that is currently on the stack. We
store that original return address in a local variable, which will be in
the same location on every subsequent self-induced call to the method.
This change also makes the code implicitly thread-safe.

We also rename functions and variables and simplify the code to make it
more readable. We have also downgraded to Visual Studio 2008 to make the
solution more readily available to a wider audience.