Attempt to "solve" Asserts

Just trying this "send a PR as soon as you start a branch" thing. Not ready for merging yet (very unfinished).

I'm doing some work to make it smarter about which hints it will give you. It won't tell you a hint unless that actually affects the outcome of the Assert.

At the moment I make output like this:

```
System.Exception: IsTrue failed, expression was:

s == s2 || r1 == r2
. .. .. __ .. .. ..
. __ .. |  .. __ ..
. |  __ |  __ |  __
| |  |  |  |  |  [1, 2, 3]
| |  |  |  |  False
| |  |  |  [1, 2, 3]
| |  |  False
| |  "hellO"
| False
"hello"

The following 2 alternatives would have made the assertion true:

1) Using case-insensitive string comparison

  String.Equals("hello", "hellO", OrdinalIgnoreCase) || [1, 2, 3] == [1, 2, 3]
  .    . .    .                                      __           ..
  .    . \_ __/                                      |            __
  \_ __/   |                                         |            |
    |      |                                         |            False
    |      |                                         True
    |      True
    typeof(string)

2) Using Enumerable.SequenceEqual instead of object.Equals

  "hello" == "hellO" || [1, 2, 3].SequenceEqual([1, 2, 3])
          ..         __           .           .
          __         |            \_____ _____/
          |          |                  True
          |          True
          False
```

I'm also hoping to use this new ability to extend its reach inside internal lambas so that it will (for example) make suggestions about:

    new []{ "hello" }.Any(x => x == "HELLO")