Include both sources in IndexNode sources list

getSources() is meant to return all subplans of a given node as it's
used for various plan-walking activities.
Implement PlanRewriter as a regular visitor

The rewriter interface abstraction is unnecessary.
Replace inner classes with lambdas
Isolate beginCreate/beginInsert plan rewriting logic

It's currently embedded in DistributedLogicalPlanner. This commit
moves it to a separate optimizer in preparation for making the distributed
planner just another optimizer, too.

The current implementation is a big hack that we need to fix eventually.
This logic should be invoked on query start, not during planning. At
that point, the token returned by beginCreate/beginInsert should be
handed down to tasks in a mapping separate from the plan that links
plan nodes to the corresponding token.
Allow internal plugins to register parametric types
Fix output type of learn_regressor() function
Make Classifier a parametric type
Add support for string labels to ML plugin
Add serialization id test for unit normalizer
Fix IntelliJ warnings in MLFunctions
Generalize evaluate_classifier_predictions

It now works with multi-class classifiers and also with string labels
Remove unnecessary synchronization from MLPlugin
Fix IntelliJ warnings in AbstractSvmModel
Fix to add bufferIds for the tasks created during waitForFreeNode

Fixes #2135
Implement HASH_CODE operator for JSON type
Document DATE memory representation change
Add getColumnTypes API to RecordSink
Add PageSink to SPI
Move RowPagesBuilder and SequencePageBuilder out of operator package
Add ConnectorPageSink to Raptor