Implement a scalar expression parser

closes #395

This will fail until the `py.test` PR (#384) goes in

- [ ] string tests
- [x] failing (they should) chained comparison tests
My understanding is that the Python interpreter treats `x < y < z` as `x < y and y < z`.  Because `x < y` is non-zero this becomes `y < z` (`not False and x` is `x`).  We would need to take the string `x < y < z` and unpack it explicitly to `(x < y) & (y < z)`