Replace the DataState mechanism with the datafork library.

This is a big change to the interpreter interface that replaces the
Symbol-specific DataState interface with the more-general datafork library.
In the immediate term this allows for a more natural Symbol interface
where the value and type appear as properties of Symbol, rather than
callers having to know about the state indirection.

The longer-term motivation for this change is to allow datafork to be
used to implement other capabilities that aren't directly symbols, like
return values, object attributes, array members, etc.