Add associated_allocator specialisations for composed operations.
Use new function names on_work_started/finished.
Use handler's associated executor for work tracking and dispatch.
Use asio::strand as the name for the new executor template.

The older strand implementation can be used as asio::io_service::strand. This
name is backwards compatible. In addition, including the strand.hpp header will
make the old strand available if io_service.hpp is also included.
Fix long line.
Add io_service::restart() and deprecate io_service::reset().
Fix invalid self move assignment.
Minimise dependencies on the io_service from the reactors.

Eliminates some circular dependency issues as the system_executor, which
uses the scheduler to implement its post() and defer() functions, is
present everywhere due to associated_executor's primary template.
Implement hardware_concurrency on Windows.