Split Computing and Early Exiting for Deep Learning Applications: Survey and Research Challenges