The thing is core team can not support so many modules in main repository, so we decided to move less popular (or useful) modules to opencv_contrib. We also can not support CUDA on a regular basis, because we don't have enough resources and expertise in this constantly evolving area.
Also, we wanted to move some algorithms to the main repository so that they become a mainstream thing, a basis; DIS optical flow is a nice example of effective modern algorithm with good quality.
Another fact is that in some areas traditional CV algorithms can not compete with DL-based approach, nowadays object detection can be performed using dnn module with better effectiveness than cascades.
cmake scripts for matlab has been moved to the corresponding module because it is the most appropriate place for them, my personal opinion is that we should spread all 3rdparty dependencies to corresponding modules, e.g. parallel backends to core, image codecs to imgcodecs, etc.. Currently build scripts have some legacy stuff from 2.4.x and many constructions to support older cmake versions (2.8.12).
We want to keep source compatibility, so moving from main repository is finished, but reverse still can happen.
4 . 5 . -- long overdue ! (imho)