task_local_storage(body,key,val): dynamically scoped storage.

This implements a common pattern for emulating dynamic scoping: use
task-local storage and restore the old value (or lack thereof) when
a block of code is done executing. The source_path code is a little
too specialized to use this, but it's the same basic pattern.
base/test.jl: fix the broken {register,with}handler API; export less.

This was never meant to work like that. There is a stack of handlers,
not an array slot that you assign to. And the stack must be per-task,
so using a global array is broken too. This version uses task-local
storage instead to do dynamically scoped test result handlers.

I'm not sure why so many things were exported from the Test module.
Things that are prefixed with test_ and are clearly meant to be used
from other modules make sense to export but exporting names like
Result, Success, Failure, Error, registerhandler, and withhandler is
just nuts – those should be accessed with explicit qualification as
being inside the Test module.
test/bigint.jl: adjust so bigfib(0) == 0, add more tests.

I noticed while doing this that this uses a non-standard definition
where fib(0) == 1 instead of fib(0) == 0. Doesn't really matter as
this is just a test, but it caused me some concern when this result
wasn't checking out with fib(10^6) as computed by Wolfram|Alpha™.
So I changed this to match the standard definition and shortened it
up a bit. I also added a bunch of tests to make sure that it works
as it should.
Merge branch 'master' of github.com:JuliaLang/julia