Use exceptions derived from std::runtime_error

Define spike::system_error to provide information through what() as well as
an error return code.