Refactored kernel selection and few minor changes

- Put kernel selection under a more general base `CKernelSelection`. `CMMDKernelSelection` works as a subclass of this. `CKernelSelection::select_kernel()` method is kept abstract and `CMMDKernelSelection` overrides this. @karlnapf @sejdino let me know your thoughts on this.
- Added a few setter/getters in CKernelIndependenceTest and CHSIC that are required for feature selection.
@karlnapf I was getting a weird error with BAHSIC because m_num_features was not being set by these set_p/set_q calls and the statistic computed was coming out to be nan.