anchor.diff:  
   * Equality adheres to type promotion semantics for numerical values, i.e. equality holds for values of different numerical type if they cast into the exactly same same value of the lowest common super type.
   * Other than the type promotion between Numbers, 2 values of different type are always regarded as not equal.
  -* Equality checks always return TRUE or FALSE. They never result in NULL output, undefined behavior, nor do they ever throw an error. Detailed behavior is described in
  +* Equality checks always return TRUE or FALSE. They never result in NULLTYPE output, undefined behavior, nor do they ever throw an error. Detailed behavior is described in
   
   ===== Equivalence
   
  
positive.code: ===== Date
  * Date value is ordered chronologically
  
  ===== NULL
  * NULL is after all value types
  
  ==== Composite types
  ===== Vertex / Edge / VertexProperty
  
negative.code: * String / Char
  * UUID
  * Date
  * NULLTYPE
    ** It denotes the "undefined" value.
  
  Graph providers may not support all of these types depending on the architecture and implementation. Therefore TinkerPop must provide a way for Graph providers to override the behavior while it has its own default behavior. Also when some types are not supported Graph providers needs to map unsupported types into supported types internally. This mapping can be done in either information-preserving manner or non-preserving manner. Graph providers must tell which mapping they support through `Graph.Feartures` as well as which types they support.
  
  