(WIP) Have the option to do async through callbacks instead of futures

* Async callback (errors are not yet managed properly)

@denpen @tokutake @MiLk @ronkorving
```
src/mage.cpp:57:5: error: no matching function for call to object of type 'const std::function<void (mage::MageError, Json::Value)>'
                                callback(NULL, res);
                                ^~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/functional:1504:9: note: candidate function not viable: no known conversion from 'long' to
      'mage::MageError' for 1st argument
    _Rp operator()(_ArgTypes...) const;
        ^
src/mage.cpp:59:17: error: conversion from 'long' to 'Json::Value' is ambiguous
                                callback(e, NULL);
                                            ^~~~
```