Improved Error Handling:
- refactored challenge request related code from challenge.py into challenge_request.py (previously challenge_request_impl.py)
- use singleton design pattern for get_id_factory()
- added methods for handling errors in BaseHandler
- added more test cases
- more error handling and test cases to come!