Y Scale domain adjustment algorithm

Add API endpoint to provide custom y scale domain adjustment algorithm based on new x scale domain.

Close #1079.
what if you parameterize the `adjustDomain` function with a type
`adjustDomain<T>(xDomainChanged: boolean)`
then you can put in the `X` or `Y` type appropriately when you call the function and not use anys all over
this is just an idea im not sure if it works well or not