Add gen_server 2.0.0

Adds backwards incompatible API change: returning an Error requires taking an error and state now. Previously one could not do a controlled terminate by Error and update the state value, meaning the state passed to the terminate callback could be stale.