support string return values from ffi functions

this works for `getenv`, but i think it doesn't ever free the values. how would one do that?

i used this snippet for testing the memory usage:

```clojure
(loop [x 0]
  (if (eq x 1000000)
    x
    (do
      (getenv "HOME")
      (recur (inc x)))))
```

a bit more troubling, the same snippet, but with `(str "just " "an " "example")` instead of the `getenv` call also doesn't seem to free anything.