Move non-CV functionality from core.hpp to separate utility.hpp header