Added async thrift interface
Multi Loop Support

The original design of libtasks was to implement the leader/followers
pattern. In this scenario one event loop is passed from worker thread
to worker thread. In certain situations this will not allow for optimal
throughput and responsiveness of an application.

To tackle that problem run modes have been added to libtasks. Two modes
are available:
  - single loop (default)
  - multi loop

The multi loop mode runs an event loop in each worker thread. If you
are using the build-in acceptor implementation you need to check your
code (See acceptor.h for more details). To activate the new mode, you
have to call

  dispatcher::init_run_mode(dispatcher::mode::MULTI_LOOP);

before setting up the dispatcher singleton by calling

  dispatcher::init_workers(num);

or

  dispatcher::instance();
Merge branch 'master' into multi_loop
Merge branch 'multi_loop' into thrift_async
Added async thrift processing.
Mergeg async and multiloop branches, cleaned up cmake files, fixed issues with new compilers.