Fix query interpolation for expressions of type String

Clojure has both `pr-str` and `print-str`, the former for consumption by the reader and the latter for human consumption. Scala’s `toString` is equivalent to `print-str` and does not quote strings. To be able to interpolate expressions of type String, the macro needs to quote the resulting strings, such that they can be read with `datomic.Util.read`.

Now, when substituting trees of type string, the macro performs a type test for `String`.

As a small improvement, `AbstractQuery` provides overrides for `equals`, `hashCode`, and `toString`.