make it simpler to customize `-run`

-run now takes a map of options. This is prep for search
 customization. Remove `*reify-vars*` dynamic var, it's now passed
 along as an option to `-run` option map. fix the other run macros to
 account for the new interface.

unlike occurs-check flag, we just check whether we need to reify
vars via checking for the :reify-vars flag in the meta field of the
Substitution. This is fine since we only check this at the end, not
all the time as we do w/ occurs-check.

change simple unifier code to always run with :reify-vars set to false
as that's rarely ever the desired behavior.

in `binding-map*` filter out vars that don't point to anything.

Update the tests to account for these changes.
note todo on is macro
missing key :oc
make `make-s` and `tabled-s` less tedious
possible fix for LOGIC-109, namespace core.logic fns, fully qualify
subst keyword
support :as in run interface

You can now write the following

(run* [x y z :as q]
  ...)
`everyg` second argument can now be a logic var
convert benchmarks to new run* style
convert tests to the new style
Add `fnc` macro that defines anonymous constraints suitable for use with the unifier's :when map, rename `defc` to `defnc` for consistency.
move protocols and interfaces to their own namespace so development is
less tedious for all.
amend docstring for `fnc`

`fnc` constraints do not run until all their arguments are *fully*
ground. The docstring now states this.
minor refactor of `fnc`
more changes for protocols move

need to import protocols in clojure.core.logic.arithmetic. remove some
old debug code from bench.clj
more protocol change tweaks

update datomic, flip order of protocol :use in fd.clj & nominal.clj
move simpler unifier code out

Put simple unifier code into its own namespace. `unifier` and its supporting
fns renamed to `unify` and `binding-map` and its supporting fns
renamed to `unifier`. This naming convention better reflects what they
do.

Update tests.
support custom var reification

Can now set :reify-vars to a fn that takes a var and the reification
substitution map. This function should extend this map. Add test cases
for :reify-vars false and :reify-vars where the fn leaves the
reification map unextended allowing vars to pass through.
new unifier interface

All the simple unifier fns now take either one or two arguments. In
the single arity case they take a seq of terms to unify. In the two
arity case they take an options map and the seq of terms.

Currenly options can contain a :when entry which is a map of vars to
constraints which should be applied to them.
formatting
fix bug in predc where we were not checking whether the pform was
identical to the predicate in which case we don't want to call it.