refactor abstract operator into discreteoperator
Created by: gpescia
This PR refactors most functionality away from AbstractOperator into a new DiscreteOperator. This contains the first commit to #823 , and @PhilipVinc (who is writing here) thinks it's best we merge this ASAP so to avoid more merge conflicts..