anchor.diff:  ** NaN is not equal to NaN, but equivalent to each other
   
   * Other than the edge case around NaN (and, as of today, Numbers), equivalence in TinkerPop is identical to equality.
  -* Like equality, equivalence checks always return TRUE or FALSE. They never result in NULL output, undefined behavior, nor do they ever throw an error.
  +* Like equality, equivalence checks always return TRUE or FALSE. They never result in NULLTYPE output, undefined behavior, nor do they ever throw an error.
   
   ==== Comparability vs. Orderability
   
  -Comparability and orderability can be understood as the "dual" concepts of equality and equivalence for range comparisons (rather than exact comparison). For the 2 values of the same type (except for NaN), comparability is stronger than orderability in the sense that everything that every order between two values that holds TRUE w.r.t. comparability also holds TRUE w.r.t. orderability, but not vice versa. Comparability is what is being used in range predicates. It is restricted to comparison within the same type or, for numerics, class of types; comparability is complete within a given type, but returns NULL if the two types are considered incomparable (e.g., an integer cannot be compared to a string). Orderability fills these gaps, by providing a stable sort order over mixed type results; it is consistent with comparability within a type, and complete both within and across types, i.e. it will never return NULL or throw an exception. +
  +Comparability and orderability can be understood as the "dual" concepts of equality and equivalence for range comparisons (rather than exact comparison). For the 2 values of the same type (except for NaN), comparability is stronger than orderability in the sense that everything that every order between two values that holds TRUE w.r.t. comparability also holds TRUE w.r.t. orderability, but not vice versa. Comparability is what is being used in range predicates. It is restricted to comparison within the same type or, for numerics, class of types; comparability is complete within a given type, but returns NULLTYPE if the two types are considered incomparable (e.g., an integer cannot be compared to a string). Orderability fills these gaps, by providing a stable sort order over mixed type results; it is consistent with comparability within a type, and complete both within and across types, i.e. it will never return NULLTYPE or throw an exception. +
   More details on comparability and orderability are sketched in the following two subsections, respectively.
   
   ===== Comparability
  
positive.code: ===== Date
  * Date value is ordered chronologically
  
  ===== NULL
  * NULL is after all value types
  
  ==== Composite types
  ===== Vertex / Edge / VertexProperty
  
negative.code: 
  * For numbers,
  ** it should be aligned to equality conceptually as far as type promotion is concerned. e.g. `1.0 < 2 < 3L`
  * Comparison should not result in undefined behavior, but can return NULLTYPE if and only if we are comparing incomparable data types. How this NULLTYPE result is handled is Graph provider dependent.
  * Otherwise Comparison does return TRUE or FALSE
  
  ===== Orderability
  
  * Used to determine the order. In TinkerPop, the order step follows the notion of orderability.
  * Orderability must not result in NULLTYPE / undefined behavior.
  * Orderability must not throw an error. In other words, even if 2 values are incomparable we should still be able to determine the order of those two. This inevitably leads to the requirement to define the order across different data types. For the detailed order across types, see appendix.
  * Orderability determines if 2 values are ordered at the same position or one value is positioned earlier than another.
  * The concept of equivalence is used to determine if the 2 values are at the same position
  