These two overloads the operator `== and
the result of the equal function.
a==b is considered true if the two
timeranges are of the same type, have the same rules
(language, timezone, etc) and are the same timerange.
equal(a,b) are considered
true if a and b are the same timerange, exactly the same
as the equals method.
The __hash method is also present,
to make timeranges possible to use as keys in mappings.
known bugs:
_equal is not currently possible to overload,
due to weird bugs, so equal uses `== for now.