Implement Fetcher to send data via MPI instead of using input manager
- as input manager is the only entity to receive MPI messages and MPI
  local buffer is bounded, input manager should never be blocked (to
  avoid deadlock)
- previous implementation: when a box from node A needs to retrieve data from its
  reference, the box sends a fetch request to the node B which is
  currently keeping the data. Input manager of B, when receiving
  the request, will retrieve data and send to the input manager of A.
  --> this cause deadlock if there is a box from B also requests data
  from node A, and if MPI local buffers of both node are full.
- fix: a new entity called "Fetcher" is added. This is connected with
  the input manager via a stream, called fetch stream. Input manager is the writer, Fetcher
  is the reader.
  When the input manager receives a fetch request, it writes a REC_fetch
  to the fetch stream.
  Fetcher works independently from Input manager. When reading a rec
  from fetch stream, it fetches the data and sends to the destination
  via MPI.