* Enable indexing after a groupby, e.g. `df.swifter.groupby(by)[key].apply(func)`
* Improve groupby apply progress bar
- Previously, the groupby apply progress bar only appeared after the data was distributed across the cores.
- Now, the groupby apply progress bar appears before the data is distributed for a more realistic reflection of how long it took
* Additional groupby apply code refactoring and optimizations, including removing the mutability of the data within `ray`