What are the differences between user-space threads and kernel-space threads, and how do they impact context switching latency on embedded systems?