ADD: SelectionPipe
Use whereString and shema to initialize it.
Usage: read() the result after write(row)
Then the SelectionPipe#read() returns nulls if the where is not satisfied, otherwise it should return the original row the last time we wrote.
MOD: JoinReducer
Use the SelectionPipe to rewrite the JoinReducer
MOD: add SelectionPipe in GroupByMapper
ADD: GroupbyExecutor.java
ADD: ProjectPipe.java, usage please see SelectionPipe.java
MOD: use ProjectPipe to add the projection in groupby
DEL: src/db/Selector.java
ADD: some test sql