Implements backtracking cut operator.

Speculative pull-request. Please consider this a feature suggestion / idea thread until further notice. Code seems to work, but not carefully vetted yet.

Circle CI uses schema for validation of config files. Some uses of `either` in Circle's schemas cause crummy error messages. For example:
![screen shot 2014-05-21 at 2 06 25 pm](https://cloud.githubusercontent.com/assets/490421/3046685/d4da33b2-e12b-11e3-8dd4-4302830ec6c3.png)

In this case, we know we've got a Heroku config and not a command line, but we get a more general error because both branches of an `(either String Heroku)` node fail. Deeper in the schema, a sensible error message was produced, but backtracking masked it.

Here's a simpler test case:

```clojure
(require '[schema.core :as s] :reload-all)

(def CommandMap {:command s/Str :args [s/Str]})
(def Command (s/either s/Str CommandMap))

(s/validate Command "echo hello there") ; success
(s/validate Command {:command "echo" :args ["hello" "there"]}) ; success
(s/validate Command {:command "echo" :args ["hello" :there]}) ; fails with bad error
```

The low quality error is:

```
Value does not match schema: (not (some (check % a-clojure.lang.PersistentArrayMap) schemas))
```

This pull request implements an "impure" `cut` operator in the style of Prolog. When used carefully, cuts can substantially cull the search space, resulting in better performance and, importantly, better error messages. Continuing with the same example:

```clojure
(def Command (s/either s/Str (s/cut CommandMap))) ; note the cut

(s/validate Command {:command "echo" :args ["hello" :there]}) ; fails with *good* error
```

The new error is:

```
Value does not match schema: {:args [nil (not (instance? java.lang.String :there))]}
```

This can work more generally across a schema AST, since it's implemented via exception handling. A cut can be placed in a `both` or similar to guide cutting. For example:

```clojure
;; Guarded cut
(s/both (s/pred map?) (s/cut CommandMap))
```

It may actually make sense to bake guarding support in to the `cut` function, since the tagged-node single-arity style usage is a bit awkward. I just wanted to get this PR up for discussion before getting in to the details of what API would be best, if this feature is decided to be a good idea at all.

Of course, like Prolog's cut, unsoundness can creep in to validation if cut is used improperly. It's a dangerous, but useful side-effecting operation.