Adding optional trial argument to model_init
# Model structure optimization 

This PR proposes to add the "trial" argument to the model_init function when using `trainer.hyperparameter_search`.
It's backward compatible using six to check the number of arguments of model_init through Python reflection.

```
def model_init(trial):
    if trial != None:
        layer_count = trial.suggest_int("layer_count", 2, 4)
    else:
        layer_count = 2
    return MyModel(layer_count)


trainer = Trainer(
   ...
    model_init=model_init,
   ...
)

trainer.hyperparameter_search(direction="maximize")
```

