Samuel I want to understand what NLTK is in natural language processing. How does it help with tasks like tokenization, text analysis, and language modeling? Can someone also explain its key features and typical use cases?