Remove start_routine dependence on tls_addr

Previously start_routine directly referenced the tls_addr variable passed into
its parent function as an argument. Now we package that up tls_addr and pass
it to the nested function explicitly. TBB (or more likely C++) didn't like the
old way of doing things for some reason. In any event, this is probably the better
way to do it anyway, since we take the address of the nested function. The old
way would force us to make a copy of the function on our stack each time the
parent function was called. The new way doesn't.