Shuffle replicated vertex attributes efficiently in columnar format

Vertex attributes were previously replicated in row format using MessageToPartition. This pull request instead replicates them in column format by grouping together all attributes being sent from a vertex partition to an edge partition.

Performance comparison for 20 iterations of PageRank on LiveJournal:

Commit | Comm. per shuffle | Runtime
--- | --- | ---
6ee05be1c83768d50bff72f63f3a9c533c18e8c8 (master before #60) | 1675 MB | 484 +/- 6.5 s
1a06f707e358055a2126a71bc77f235a181c225d (master after #60) | 1629 MB | 244 +/- 8.0 s
53d24a973e7bd71d1509a326f0f12376a252f1db (aggregateNeighbors-variants) | 1238 MB | 160 +/- 7.7 s
**d1ff1b722274de8e03938452d8155f2a26c55f96 (pid2vid)** | **1123 MB** | **148 +/- 4.6 s**
3c0995dbbc7266bb90d1add75ee4820a6b385b10 (Bagel) | | 207 +/- 14 s

**Depends on #55. Incremental diff: https://github.com/ankurdave/graphx/compare/aggregateNeighbors-variants...pid2vid**

Resolves #31.