Boost.Function (an almost complete rewrite)