More checks and tests

* Downgrade bit-wise operation on Bool from ERROR to WARNING

ideas from @snotskie:
* check “for i in {:a=>1, …}” since the user most likely wants “for
(k,v) in …”
* check function argument type for container based on abstract.
* check string concatenation using +
* check dictionary [ ] with mixed types and { } with uniform types.