refactored Interceptor.Intercept to use a set of strategies. .

Function was previously a little difficult to figure out due to many ifs and returns. I broken up the function in 8 different strategies, of course  not yet  perfect, but should be easyier to modify/read.