Implement detailed error codes

This brings the existing error-handling cases into line with latest docs.  There are lots more error cases to add, e.g. all the "bad input" errors, but we can do that as a separate PR.  @dannycoates r?

Note that I moved the generation of unknownAccount error closed to the point where it's looked up, rather than inside the SRP handling routines.  Does this seem sensible?