[Add] Support for Different LRs with Param Groups
This PR aims to add support for different learning rates for different modules in a model. For example, when finetuning an ASR model on small datasets, we might want the encoder to have smaller learning rate than the decoder. With this PR, we can do this by adding a `optim_param_groups` section under `model` in the config file:
```yaml
model:
    optim_param_groups:
        "encoder": 
            "lr": 1e-4
            "momentum": 0.8
    optim:
        "name": sgd
        "lr": 1e-3   # default lr for non-specified parameters
```
In this example, all parameters in the encoder will have learning rate `1e-4` while all other parameters (e.g., decoder) will have learning rate `1e-3`. 

For logging learning rates, the current models only log the first group of `param_groups`, which in this case is the default `lr`.  To log all learning rates, we need to modify the `training_step()` function in the model.