Various parsing fixes (#39)
Fixes needed to get the source code of the [verified-storage project](https://github.com/microsoft/verified-storage/) to parse correctly, at least on the `kv_dev` branch. The improvements include:
- Tricky corner cases created by Verus's triple operators (`|||` and `&&&`), including interactions with Rust block expressions
- We no longer confuse Rust's `assert!(...)` for a Verus `assert(...)`
- Fix for `assert(e) by (name)` without a following block
- Proper parsing for both styles of `global` declarations
- Allow `where` to be followed by a `recommends` clause
- Demote verus to be a contextual keyword, so that it will show up as an identifier when used inside an attribute, e.g., as
`#[verus::line_count::ignore]`
- Don't emit an error when we encounter a normal for loop without a named iterator