ReverseCommunicationOptimizer becomes an abstract class and do more things, new LineSearchStatus enumeration