Exception throw by services (or potentially useful for other parts of the app too). Represents an error that corresponds to an exact type - as listed in {@link ServiceExceptionType}. Also has an optional "data map", which is name/value pairs that describe the error further. The idea is that services or lower level areas can throws one of these exceptions and it can be directly translated into a JSON-RPC 2.0 error message and sent back to the caller. This avoids complicated error handling logic higher up and should make things simple.
TODO: This class intentionally does not extend RuntimeException (because callers should be catching this and converting it to an error response). However, this means that be default database transactions are not being rolled back when this is thrown - not sure if this is correct or not, needs to be reviewed (probably is not correct and needs adjustment in the Spring settings).
@author bradpeabody