Recursively traverse data structures and #config/edn values for 'extract' and 'provide?'

This allows something like the following to work in your 'config.edn' file:

``` clojure
    {foo.bar/aws-creds {:access-key #config/env "AWS_ACCESS_KEY_ID"
                        :secret-key #config/env "AWS_SECRET_ACCESS_KEY"}}
```

Previously this would have (technically) worked, but the user would have to know
that some values needed to have 'extract' called on them, which was not
intentional since the advantage of the #config/* reader tags is that they can
separate the config value from where that config value is found.

The traversal implementation is simple and not necessarily correct for arbitrary
Java objects in Clojure, but it works because we're dealing with EDN.