PassThroughCode refactoring and create PassThrough Core and API for enhace reusability

Again, it looks like log4j has directly been used instead of using commons-logging related abstractions while the latter is used in many other places.