MB-11917 Async map_doc implementation

map_doc function make use of NIF which in turn calls v8 library
to perform map function. Currently this is implemented in
synchronous fashion. Since map may take long amount of time
depending on map function, number of views and number of documents,
it is better to implement it in asynchronous fashion. In order to
implement async map, a template task queue class is implemented and
all map requests are enqueued and the function returns immediately.
4 global threads are created since view engine support 4 concurrent
view indexing. All incoming map requests are randomly assigned to
one of these 4 threads to balance load. These worker threads
dequeue tasks, does the map and sends map results or error as
messages to erlang world. This will help erlang scheduler to get
proper reduction counts for map request and thus perform fair
task scheduling.

Change-Id: I9793c91d0b9c8621ac787069f9dee87ae7fb5ed5