Merge simplified model from asio 'executors' branch.

Changes include:
- Nested work classes are gone, replaced with separate functions
  for work_started() / work_finished(). An RAII utility template
  executor_work<> has been added to manage work automatically.
- The make_executor function has been replaced with get_executor,
  which supports classes that have a nested typedef executor_type
  and a member function get_executor().
- Initial support for allocators as part of executor type requirements.