Add toString() to HintedGraphs
Extracted an interface from ElementRange + bugfix

The class formerly known as ElementRange is now IntervalElementRange.
ElementRange is a three-method interface (which IER implements).

I made this change to ease support for modular hintspaces.
IntervalElementRange's contains(x) implementation is basically this
condition:

  lower.compareTo(x) >= 0 && upper.compareTo(x) > 0

This is awkward with modular arithmetic.  The condition can work with
modular arithmetic by storing lower less than zero or upper gte the
modulus (when upper < lower), but this requires binary arithmetic and
there's no real fundamental need for it.  Extracting the interface
allows substituting an alternative contains(x) implementation where
appropriate in Titan.

This commit also fixes a bug that could erroneously cause no ranges to
match a valid hint.  The old implementation of contains(x) implicitly
assumed that the only positive value returned by compareTo(...)
implementations would be one.  The actual compareTo(...) method
contract is more permissive.  Implementations can return any integral
value.  Practical example: Titan's StaticBuffer compareTos sometimes
return values with absolute values greater than one.
Make incoming HintedGraph message writes volatile

This is a necessary thread safety change.  Prior to this commit, there
is no guarantee that the Rexster thread responsible for routing
queries based on hints will ever see incoming messages with
HintedGraph range data from its peers (which are written by a separate
thread).  This manifests as RexsterCluster nodes that seem to "ignore"
hint messages received from peers.  I launched a two-node Rexster test
cluster ~5 times, letting it idle for 3~20 minutes each time, and not
once did incoming messages dumped by the JGroups receiver thread to
log4j become readable in the Rexster query routing thread.
Stop swallowing hint processing Exceptions

Swallowed exceptions swallow manhours :(
Adding hint-related logging statements

I've enclosed debug() and trace() calls on the potentially
performance-sensitive path in isDebugEnabled() and isTraceEnabled().
Some of the log strings are potentially costly to generate, and the
Log4j API that Rexster uses requires generating them even if trace and
debug are disabled (unless they are gated by these boolean checks).