Add BOOST_COMPUTE_ADAPT_STRUCT() macro

This adds a new macro which allows the user to adapt a C++ struct
or class for use with OpenCL given its type, name, and members.

This allows for custom user-defined data-types to be used with the
Boost.Compute containers and algorithms.
Add BOOST_COMPUTE_CLOSURE() macro

This adds a new macro which allows users to create closure functions
which can capture C++ variables and make them available in OpenCL.