Add full support for Postgres window functions
* Add support for frame_clause

```
    frame_clause can be one of

    { RANGE | ROWS } frame_start
    { RANGE | ROWS } BETWEEN frame_start AND frame_end

    where frame_start and frame_end can be one of

    UNBOUNDED PRECEDING
    value PRECEDING
    CURRENT ROW
    value FOLLOWING
    UNBOUNDED FOLLOWING
```
* Fix `WINDOW` clause positioning. Should be after `HAVING`
* Allow non-list values for `partition_by` and `order_by`