Abstract out a lot of redundant code in Vagrantfile.

This is much more concise, and easier to understand what's going on.

Note that I haven't actually run/tested this; I'm a little unclear on how to do that. However, I'm fairly certain that at least the idea is correct. obviously this shouldn't be merged until we've verified it's working.

Also: I spotted the `nested = true` bit, and wasn't sure exactly what that meant -- my memory is that nested virtualization didn't really work as expected. Do we want that to be there?