// the underlying promise-returning function is called with the supplied context argument

Normally, callbackify will only work with fixed-parameter-length functions, and will use the declared
parameter length to determine if the extra callback argument is present. If you need to use
callbackify with variadic functions, or functions that don't declare their full argument
list, you can use:

// options argument is optional

var getUserById =callbackify.variadic(function(id,options){

if(options ===undefined){ options ={}}

if(options.select){

returndb.users.byId(id).select(options.select).first()

}else{

returndb.users.byId(id).first()

}

})

// we can do either of these

getUserById(23,function(err,user){})

getUserById(23,{ select:['name']},function(err,user){})

Note that this will not work if the last argument your function can take
is a function, as that last argument will always be detected as a callback
function.

api

Takes a Promise-returning function fn and returns a new function which can return a Promise or take a callback as the last parameter. If a callback is supplied, the function returns void. If no callback is supplied, the promise is returned.