Expand errors that can be returned from RPCs

Previously we only had a single string error type that could be returned
from every RPC. Add the rpc.Err interface that new error types can
implement so that they can be sent over the wire.

These new error types are only returned when a new (rpc1) RPC header
code is sent from the client. With the old rpc0 code, the RPC behaviour
is unchanged.

Added path.ErrNotFollowable as a first example.

Change-Id: Ib37d2b5c23a286128842c0d40909d89dd758d1e1
17 files changed