Possible changes 

Possibilities for discussion.

1. Quads are not extended Triples (useful if the default graph is a union of named graphs but this isn't always the case) but share a common supertype.
1.  Add a CONTRIBUTING file
1.  3 parts of a Literal
1.  getObject is a Resource, not a Literal
I am against "as" methods in general as they indicate there is something that users (or HashSets) may get confused, based on the model.

The current Sesame solution (not including Graph in hashcode/equals) confuses users, but this may still confuse them in a different way. If a user creates a HashSet<TermTuple> to avoid having to know whether they are handling a Triple or Quad, and it breaks because of hashcodes/equals, they tend to get disillusioned.

TermTuple may be useful in OO terms, but it causes a collision with hashcode/equals that we can't actually support without doing something like the Sesame solution (ignoring Graph for hashcode/equals) so probably not going to work well.

A Graph is defined in RDF-1.1 as a Set<Triple> (effectively), so we might be able to work on that further to support Quads using Map<IRI, Set<Triple>> or similar and not have Graph as a property of Triple.