preserves the record type when validating a map-schema

This issue was brought up on #68.

Perseving the type is required in some cases when other schemas, in a 
composite schema,  are relying on the type information being present
(e.g. s/protocol). See the new test case for an example of this.

I should point out that the added `record?` util fn is redundant in
Clojure 1.6.x and so the following error will be printed:

    WARNING: record? already refers to: #'clojure.core/record? in namespace: schema.utils, being replaced by: #'schema.utils/record?

`record?` hasn't been added to ClojureScript yet.

Before merging this in could you give me some guidance on how I can use
a cljx project as a lein checkout?  I wanted to test this locally in my
own project but couldn't figure out the best way to do that.  Even when I do
`lein install` I get the following compile error:

    No such var: schema-macros/compiling-cljs?, compiling:(plumbing/fnk/impl.clj:352:19)
Rather than this change, I think I would prefer adding a `preserve-map-type` fn that takes old and new.  Then you can just wrap the loop in a call to `preserve-map-type` without further complicating its internal logic.