CacheVertex: fix broken double-checked locking

This bug repeatedly caused the following NPE in one of our
nondeterministic stress tests.  I ran into the exception by accident
while generating sample data with JUnitBenchmarks.

I think this bug could be fixed by marking one of
relationCache/queryCache volatile, always writing the volatile one
strictly after the nonvolatile one, and always using the volatile one
in DCL if-statements.  However, this code looked like a maintenance
hazard when I wrote it out -- a change as innocent as reordering
assignments to these two state variables could cause it to break.  So
I went with a holder pattern instead, even though it's probably
slower.

java.lang.RuntimeException: java.lang.NullPointerException
        at com.thinkaurelius.titan.graphdb.TitanGraphConcurrentTest$BarrierRunnable.run(TitanGraphConcurrentTest.java:331)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
        at com.thinkaurelius.titan.graphdb.vertices.CacheVertex.loadRelations(CacheVertex.java:48)
        at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx$5.execute(StandardTitanTx.java:586)
        at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx$5.execute(StandardTitanTx.java:539)
        at com.thinkaurelius.titan.graphdb.query.QueryProcessor.getUnwrappedIterator(QueryProcessor.java:56)
        at com.thinkaurelius.titan.graphdb.query.QueryProcessor$OuterIterator.<init>(QueryProcessor.java:132)
        at com.thinkaurelius.titan.graphdb.query.QueryProcessor.iterator(QueryProcessor.java:48)
        at com.google.common.collect.Iterables$7.iterator(Iterables.java:611)
        at com.google.common.collect.Iterables.size(Iterables.java:110)
        at com.thinkaurelius.titan.graphdb.TitanGraphConcurrentTest$SimpleReader.doRun(TitanGraphConcurrentTest.java:298)
        at com.thinkaurelius.titan.graphdb.TitanGraphConcurrentTest$BarrierRunnable.run(TitanGraphConcurrentTest.java:329)
        ... 3 more

I recently found a similar but separate double-checked locking bug in
this class's superclass, StandardVertex.  That commit was
682a496cdfd1e557785ded41efe3a49640f02b5.
(cherry picked from commit f4432878068cb809d88db1b6fd062c4993aecab5)