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.

What do you think about it?