Using TestNG setup/teardowns with data provider combinations

Sometime back, I tried to update my Kotlin test code using TestNG to use data providers and Before/After annotations and it did not work immediately. After some research I found the solution. Here is a post, explaining how to use these constructs well with an example.