Eng 6396 upsert ad hoc

I like your suggestion to make it more strict for UPSERT INTO SELECT. The original UPSERT ticket is not assumed to support UPSERT INTO SELECT, but I find that we get this feature by free when INSERT INTO SELECT is supported. And I will add tests to verify it also.

UPSERT is not a standard SQL syntax and not supported by major DB vendors. The way we support it can be easily transferred to future upgraded parser or even other parser instead. UPSERT is really an INSERT and will have different behavior when having conflicts, and I do not want duplicate the code. 

In the planner debugging, we may be able to check the 'm_isUpsert' flag to verify whether it is the real INSERT. For the executor, I am not sure the performance issue on the abstract. At least, having an extra boolean flag when executing should not slow down the INSERT. Currently, we have a 1 to 1 design from plan node to executor. However, we may create another ticket to verify the abstract executor design, we may have virtual function call cost?