Make Async subclassing better

Refactor to_dict and from_dict classmethods into encode_async_options
and decode_async_options to make them easier to override in subclasses.

Add async_from_options function which will take a async options dict and
turn it back into either an Async or an Async subclass.

Fix reference_to_path() so that it will correctly convert a class to a
string path. Looks like I caught another of Robert's bugs ;)

I based this off of Robert's persistence api https://github.com/WebFilings/furious/pull/82 branch so it looks a bit ugly for now and that should be merged in first.