Similar to #30, #23 (and see #1). Calling funcs that takes `**kwargs` is expensive and confusing. In addition, a func defined with `**kwargs` cannot be fully optimized by cython (#52).