Parks-McClellan FIR filter design using Remez algorithm. 
Calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
- Parameters
 - 
  
    | order | filter order (number of taps in the returned filter - 1)  | 
    | bands | frequency at the band edges [ b1 e1 b2 e2 b3 e3 ...]  | 
    | ampl | desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...] | 
    | error_weight | weighting applied to each band (usually 1) | 
    | filter_type | one of "bandpass", "hilbert" or "differentiator"  | 
    | grid_density | determines how accurately the filter will be constructed. \ The minimum value is 16; higher values are slower to compute. | 
  
   
Frequency is in the range [0, 1], with 1 being the Nyquist frequency (Fs/2)
- Returns
 - vector of computed taps
 
- Exceptions
 - 
  
    | std::invalid_argument | if args are invalid and std::runtime_error if calculation fails to converge.  |