add a "wraps" decorator that merges function metadata without blowing up on partials and whatnot

fixes #21