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.
A thread is created per map context which dequeue tasks from queue,
does the map and sends map results or error as messages to erlang
world. This will help erlang scheduler to get proper reduction
counts and thus perform fair scheduling.