Add `to_tuple` method and `from_tuple` function.

This allows the new extent_map to compile with Parakeet because tuple is
a builtin type (and TileExtent is not).
Add `extent_map` function.

Extent map allows user defined mapper functions to know what part of the
Distributed Array they are operating on. This is a closer parity to GPU
programming, which uses blocks and grids to organize threads.
Refactor `tile_mapper` and use `extent_map`

`tile_mapper` has been refactored, extracting the local value operations
into a separate function. It also checks the `op` type: if
LocalMapExtentExpr, it adds extent and array information.

`region_map` now uses `extent_map`, allowing it to be compiled with
Parakeet.
Fix get_local_values
Change extent_map user function paramater ordering

It was (array, ex), but now it is (ex, array). This is closer to how
shuffle orders its parameters.
Arange now uses extent_map (no longer a shuffle)
add automatic tiling optimization
add mincost_maxflow C++ implementation
fix partitioned array tiling bug
Support LocalMapExtentExpr for Parakeet optimize

'visit_MapExpr` has been updated to keep the `extent` and `array`
dependencies even after optimization. Before, visit_MapExpr would lose
these two dependencies breaking user functions after optimization.

`add_dep` in local.py had to be updated to support three dependencies
(value, extent, array). Though ideally `array` will be dropped in a
later update.
Add simple extent_map test.
Disable parakeet for arange_mapper
Add test_optimization_region_map

Check optimized dependencies to ensure they are no longer LocalInputs.
Disable parakeet for region_map
Reimplement normalize with extent_map
Rename `extent_map` to `map_with_location`.
Fix test_optimization
change mincost maxflow to dynamic programing with greedy choise
Update normalize documentation
Update scan documentation; remove accum_fn param