Learning to Rank in Theory and Practice: From Gradient Boosting to Neural Networks and Unbiased Learning