revise RPCError, add more Exceptions

currently RPCError is plain StandardError, it would parse the parameter
to string, thus what we get in rescue clause is a string like
"{ \"code\" => -17, \"message\" => \"...\"}", it would be verbose to
extract the error code.

also, this commit adds more specific exceptions, thus it would be easier
for user to catch.