Optimizations for mapReduceTriplets and EdgePartition

1. EdgePartition now stores local vertex ids instead of global ids. This avoids hash lookups when looking up vertex attributes and aggregating messages.

2. Internal iterators in mapReduceTriplets are inlined into a while loop.

These optimizations were tested to provide a 21.4% speedup on PageRank (uk-2007-05 graph, 10 iterations, 16 r3.2xlarge machines, sped up from 513 s to 403 s).
can u add some inline comment about the condition here?
e.g.

```scala
if (i > 0 && currSrcId == srcIds(i) && currDstId == dstIds(i)) {
  // We have seen this edge before
  ...
} else {
  // ...
}
```

also explain the  - 1