Use thread-local backtrace tables

We never 'throw' exceptions between threads so we can use thread-local
backtrace tables to avoid too much contention / having to resize the
global table.

Users must wrap all their threads in a

  Backtrace.with_backtraces (fun () -> ... )

Failure to do so will generate a backtrace with an error in it (therefore
it should be obvious that this wasn't done)

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Allow with_backtraces to stack

We use Hashtbl.add and then Hashtbl.remove, but always adding
a reference to the same record. We use the size of the bindings
list in the hashtable as the reference count.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Merge pull request #2 from djs55/thread-local-tables

Use thread-local backtrace tables