Store execution result as a symbol rather than a string.

It makes more semantic sense and can safe a bit of memory.

Strings are still returned from the deprecated hash
interface for backwards compatibility.

Note: I didn't provide a deprecation warning since
the hash interface is already deprecated. When extension
authors update to use the new interface they'll notice
it's a symbol and will deal with it appropriately.

Fixes #1436.