Add schema-aware letfn

Hi,

I had a situation where it was useful to have letfn with schema syntax, e.g.

```clojure
(s/letfn
      [(x :- Number [] "8")
       (y :- String [m :- Number] m)]
    (y (x)))
```

I thought this might be useful to add back in to the main project, so I've added it to schema.macros and added a set of tests which pass on Clojure and Clojurescript.