Make schema.core/recursive work with any IDeref

This patch extends the behaviour of schema.core/{Recursive,recursive}
enabling them to work with any object implementing clojure.core.IDeref.

Thanks to this change it is not required to introduce a var to define a
recursive schema. This in turn allows to

  - avoid defining a var per each recursive schema, and
  - create recursive schemas by using let bindings exclusively without
    any details leaking into the namespace level bindings.

Now recursive schemas can be built on top of promises, atoms or custom
reifications of IDeref.

The existing behaviour remains intact.
Be more specific in Recursive's explain function

If the derefable object is not a var use its class name and
identityHashCode in the return value of schema.core/explain.
Merge pull request #110 from jstepien/recursion-with-any-ideref

Make schema.core/recursive work with any IDeref