PassThroughCode refactoring and create PassThrough Core and API for enhace reusability

Throwing generic exceptions. Why don't we use some context-specific exception like "IOReactorException" within the catch block above?