Hopefully cope with Go 1.0 and Go 1.1

Go 1.1 has changed the way that functions work - basically, we have to
point at a pointer to the actual code.  Since we don't really want to
maintain different versions of the code for 1.0 & 1.1 - we use runtime
detection to figure out whether the indirection is needed.
go fmt
Make sure that the runtime knows about indirections

We want to keep these indirections, which means that the Go runtime
needs to know that we are holding references to them.  It won't look
at the contexts structs, because they are C types and so opaque to the
runtime - so we need to store them separately in a way the runtime
will see them.
Unit testing wip
Fix memory leaks in the variable argument BaseObject.Call* methods
Count how many times the goroutine has been locked to the os thread.
Otherwise we prematurely release the goroutine from the os thread
resulting in a crash, as the GIL locking mechanisms allow reentrance.
Fix import path
Add Finalize
Fixes for "function declaration isn't a prototype"