Improve code readability

I left some questions as TODOs in the code. Ankur, Dan, Joey - please take a look at those TODOs. 

On top of this pull request, I think there are two or three ways to improve substantially the modularity and readability of the code base:

1. Explicitly name the apply functions. I felt we are slightly abusing apply's here.

2. Encapsulate the specific implementations and data structures used in VertexPartition by defining more methods in VertexPartition. Basically VertexSetRDD and GraphImpl shouldn't need to know the data structures (e.g. mask, bit set, values array).

3. (not sure if this one is doable - but I feel yes so far) remove the reference to VertexSetIndex, and for all operations that require an existing index, we add a method in VertexSetRDD to implement those (rather than taking an "index" out of VertexSetRDD and use another apply in VertexSetRDD to create a new VertexSetRDD with the index).