Reimplement the equals and toString methods in NonEmptyList using fold.

Chapter 3 Exercise 6: Does the choice of fold method affect the results?

I think it is easy using foldRight to implement toString, as the seed
value can be used as emptyList().toString() which is never called in
fold methods.

In equals() case, I added a new test case
TwoNonEmptyListsAreNotEqualIfTheirSizesAreDifferentReverse
since some implementations of equals() only work in test case
TwoNonEmptyListsAreNotEqualIfTheirSizesAreDifferent but not in the new
one.

In this implementation of equals(), I take the target of comparison as
initial seed value, and as the fold goes, the seed value is reduced once
its head is the same as this head. If the target is running out, we just
return None to stands for a failure. At last, if the returned value from
fold is not None, and its content is empty, then the target equals this.
This is why I use foldLeft method for implementation.