Remove the need for the static_visitor class.
Merge branch 'master' into result_of
Merge branch 'master' into result_of
make deriving from static_visitor and providing result_type an option

 * if visitor class has ```result_type``` defined (e.g it derived from util::static_visitor<result_type>)
   use this type
 * else - attempt to automatically deduct type using ```std::result_of<F(..)>::type```
Merge branch 'result_of'

ssage to explain why this merge is necessary,