Make an ast for compile_* as needed

`my_table.compile_update(whatever)` alone crashes because the ast is nil, whereas
both `my_table.where(something).compile_update(whatever)` and
`my_table.select_manager.compile_update(whatever)` have their way.

This lets the problematic case behave like the latter.

This takes care of `compile_insert` and `compile_delete` as well.