cleanup sms error handling

NOTE: this breaks multiaction submissions of the following format:
 loc keyword x y

these have been deemed to complicated to be useful

- don't fail hard on empty messages
- better error message for no location code on requisition messages
- use SMSError instead of RuntimeError
- add test