What is CatBoost and how is it used in machine learning tasks? How does CatBoost handle categorical features differently from other algorithms? What are the key features and advantages of using CatBoost? In which types of problems is CatBoost most effective? What are the limitations or challenges when working with CatBoost?