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.
refactor the simple unifier in prep for handling sets and vectors of
symbols as the keys of the :when constraint map
handle basic set case and single constraint
show set notation for :when plus vector of constraints
example showing you can constraint two vars together
refactor a bit more, prep for :as support
first unifier :as tests, allow lvars to be terms to be unified
use namespaced ::lvars when attaching metadata to terms
remove *reify-noms* dynamic var

Instead look for :reify-noms property on the meta of the substitution
map like we do for :reify-vars. Default to true.
add constraint support to unifier, add tests