[WIP] Parallel distort random

For now, this is a PR that will eventually supersede #186 to implement parallel distort_random().

Daniel: What I've done is essentially (i) just take your original patch, (ii) move the communicate_... function into the triangulation class, (iii) add a little bit of commentary and cleanup here and there, but nothing major.

There are two issues I'd like to resolve before merging this:
1/ The test communicate_moved_vertices_02 segfaults if run with more than one processor, somewhere in packing or unpacking an MPI packet. The test uses a moved_vertices mask that is a subset of the locally owned vertices. Can you help figure out what exactly happens there?

2/ We use distort_random() in a number of tests and they would all change based on this patch. I'd really like to avoid this and consequently revert the behavior back to the original code for non-parallel triangulations. This should be relatively straightforward.
I clicked on line 2311. Sorry, I didn't expect it to look like this.
If we don't want to sent vertices for the current cell, there is no need to consider it. In unpack_data however we assume that the number of vertices is at least one and access the first entry always.