Add a slew of tests for List class

This is a really interesting area. So first let me give you some background:

There once was a product named Microsoft AJAX Toolkit. It took a very rigid and robust approach to the way it authored JavaScript. It checked the type of all arguments, it threw lots of detailed error messages. It was a very thoughtfully designed product. It was also horribly slow and JS devs hated it. It turns out that sacrificing runtime performance for developer-time assistance was a bad tradeoff, since eventually you get it working and don't want to keep paying taxes. (This is part of why TS is so awesome.)

As a counter-reaction to what happened to AJAX toolkit, on WinJS we took a very opposite approach because we saw the popularity of jQuery. If you're not familiar, jQuery does very little to save you from doing things you shouldn't and you frequently get these cryptic errors deep down in their code because you tried to set the inner text of undefined or something. While we hoped to avoid being so arbitrary, we accepted the fact that our code wasn't there to save you from the platform and we would just let things blow up if you used them wrong (e.g. this function expects an HTMLElement and you pass in a number? TypeError when we try to call a method on it!)

So why wouldn't we handle this in List?

*  Catching exceptions is very expensive (slow)
*  It could allow a silent error to enter into someone's code since they wouldn't notice setCount returning false (after all, who checks it?) and by default browser tools don't stop on caught exceptions. Now they have to debug a lot harder to find out why the setCount is failing and getting into a weird state.
*  If we save them from bad arguments here, do we provide similar guarantees for all APIs? What APIs are expected to throw and when? We should be consistent.

And as to why not testing sometimes is the right thing: A pointless test that will never fail gains you no confidence in the product, but it makes your tests take longer to run. How many times do you run the tests while developing? I can run them dozens of times a day. On WinJS it takes us several minutes to run all of our tests because we had poor discipline about what tests are important in the past. This means we don't run the tests as frequently and it's more likely that things slip by, especially since nobody wants to spend 5 minutes per browser.