Made RegressionStrategy.scala and Indicators more modular

Our code works and runs to create a graph for both ShiftsIndicator and RSIIndicator. Developer should be able to extend BaseIndicator to implement new feature, though there are still some issues remaining. The major ones are:

FBIC-3 Make params to RSIIndicator a case class
FBIC-9 metricsParams are always from emptyStrategy, should be from RegressionStrategy
FBIC-11 fix the difference in graphs of ShiftsIndicator, apparently, the coefficient vector comes out different
FBIC-16 abstract the max period of indicators -> firstIdx = getMaxOffSet() + 3 in createModel
FBIC-19 shouldn't need to loop through indicators, use mapping function
FBIC-22 Document RegressionStrategy
FBIC-26 Implement a new indicator to see how well our class works

We still have some work to do so we don't expect this pull request to be accepted. Hoping this serves as a brief code review. Please comment on any issue you can and looking forward to what you have to say!


FirstIdx is used to filter away the initial data that has non-sense value. 

For example, when you compute the RSI14 from Nov 1, 2012 to Nov 1, 2014, the first 13 days data is noisy. We use firstIdx to filter them out.

Hence, here, the indicator should decide how much data you want the regression strategy to neglect.