Lazy split

Refactor lazy evaluation:
* change granularity of lazy to halo send/recv, compute core/owned/halo, and reduction begin/end instead of whole ```ParLoop``` computation.
* maintain delayed computations in a directed acyclic graph instead of a linear trace.
* schedule halo send for early execution when possible when planning execution of delayed computations