func Func(key string, i interface{}) *Function {
	f := &Function{fv: reflect.ValueOf(i)}
	_, file, _, _ := runtime.Caller(1)
	f.key = file + ":" + key
	t := f.fv.Type()
	if t.Kind() != reflect.Func {
		f.err = errors.New("not a function")
		return f
	}
	if t.NumIn() == 0 || t.In(0) != contextType {
		f.err = errFirstArg
		return f
	}
	funcs[f.key] = f
	return f
}
Func declares a new Function. The second argument must be a function with a
first argument of type appengine.Context.
This function must be called at program initialization time. That means it
must be called in a global variable declaration or from an init function.
This restriction is necessary because the instance that delays a function
call may not be the one that executes it. Only the code executed at program
initialization time is guaranteed to have been run by an instance before it
receives a request.
package delay
import (
	"bytes"
	"errors"
	"gob"
	"http"
	"reflect"
	"runtime"
	"appengine"
	"appengine/taskqueue"
)
type Function struct {
	fv  reflect.Value  
	key string
	err error  
}
const (
	path = "/_ah/queue/go/delay"
	queue = ""
)
var (
	funcs = make(map[string]*Function)
	contextType = reflect.TypeOf((*appengine.Context)(nil)).Elem()
	osErrorType = reflect.TypeOf((*error)(nil)).Elem()
	errFirstArg = errors.New("first argument must be appengine.Context")
)