Make Memory::Query#where and #or behave more like SQL

- make #or its own method rather than an alias for #where
- in #exclude, return a copy of the array instead of destructively
  changing it
- change #order and #desc to act as modifiers rather than conditions,
  since conditions have a different internal structure now
- change #run to treat 'where' and 'or' conditions properly