Improvements for checking undefined methods.

These improvements include better error messages, less false positives by
ignoring block variables (since these currently don't carry any meaningful
information) and properly assigning core Ruby types such as String and Array.

Signed-off-by: Yorick Peterse <yorickpeterse@gmail.com>