Start GUI from giraph-debug script

and serve editor HTML/JS/CSS/image files from the same server, so the
user can simply open the GUI from http://localhost:8000 after running
the following command:

    backend/giraph-debug gui
More robust "Sandwich" instrumentation

Using two classes: one at the top and another at the bottom.
The bottom class which extends user's Computation class intercepts API
calls originating from Giraph, e.g., compute(), initialize(),
preSuperstep(), while the top class intercepts API calls originating
from user's code, e.g., sendMessage().

The bottom class is renamed by appending a `Debug` postfix to user's
Computation class' name, which will be executed by the giraph-debug
script instead of the user's original Computation class.

The top class has to be injected between the ancestor class of user's
Computation class and the AbstractComputation class (which the top class
extends).

Changing the superclass of a class using Javassist involved three steps:
1. Use CtClass#setSuperclass(), then
2. Use CtClass#replaceClassName() to replace all occurences.  Otherwise,
any reference to `super`, e.g., `super.compute()` causes problem.
3. Use CtClass#setGenericSignature() to make sure the type signature is
consistent with the new inheritance chain.  Otherwise, any type
parameter checks will fail and Giraph will refuse to start the job.

The most tricky part was rewiring user's top class that extends
AbstractComputation to correctly extend our
AbstractInterceptingComputation instead.  The generic signature
`<I::Lorg/apache/hadoop/io/WritableComparable;V::Lorg/apache/hadoop/io/Writable;E::Lorg/apache/hadoop/io/Writable;M::Lorg/apache/hadoop/io/Writable;>Lorg/apache/giraph/graph/AbstractComputation<TI;TV;TE;TM;TM;>;`
had to be replaced carefully (looking for AbstractComputation's
JVM descriptor without the semicolon, and substitute it with our
AbstractInterceptingComputation's JVM descriptor without the semicolon)
to make user's type parameters for I,V,E,M1,M2 all work correctly.
Added a complex test case for the instrumenter

that has a final compute() on BaseComputation and the DerivedComputation
to be executed extends different methods of a template pattern.
gitignore for backend
Merge pull request #30 from netj/code-instrumentation

More robust "Sandwich" instrumentation
Merge pull request #31 from netj/start-gui-script

Start GUI from giraph-debug script
Merge pull request #32 from netj/gitignore-backend

gitignore for backend
- Huge refactorization in scenario.proto. Moves common information between master's context and vertex's context into a CommonVertexMasterContext. Adds a VertexScenarioClasses message to capture all the classes for each vertex.
- Refactorization in the Wrapper classes. They all now extend BaseWrapper and have consistent names.
- Fixes a bug in the sandwich instrumentations where the ImmutableGiraphClassesConfig was using the wrong class name for user's class.
- Adding changes to TestCaseGenerator, which I omitted accidentally from my previous commit and push.
- Removes the hardcoded link to Hadoop's core-site.xml in ServerUtils.
- Changes the trace root to /giraph-debug-traces instead of the previous /.
- Fixes a bug in GiraphVertexScenarioWrapper.java, in which the loadFromProto was failing to fill the local fields.
- Fixing a bug in ExceptionWrapper and how exceptions were being intercepted for the vertex.
Merging upstream pull and basic data table changes
Merge branch 'master' of https://github.com/semihsalihoglu/distributed_graph_debugger
- Adding master.compute()'s instrumentation. Adds AbstractInterceptingMasterCompute.java, BottomInterceptingMasterCompute.java, and UserMasterCompute.java, mimicking Jaeho's previous commit.
- Extracts what's commong between AbstractInterceptingComputation.java and AbstractInterceptingMasterCompute.java into CommonVertexMasterInterceptionUtil.java.
- Reorder's the protocol buffers IDs.
Merge branch 'master' of https://github.com/semihsalihoglu/distributed_graph_debugger
Pulling the proto ID fix from upstream.
- Fixing a small bug: BottomInterceptingMasterCompute was extending SimpleShortestPathsMaster (instead of UserMasterCompute).
- Removing the import for SimpleShortestPathMasterCompute.
Merge branch 'master' of https://github.com/semihsalihoglu/distributed_graph_debugger
Fixing InterceptingMessage build failure.
Adding incoming messages to debugger server and basic table code for editor