refactor libcollections::List, add documentation

This PR refactors `libcollections::List` to remove the `@` and replace it with unique pointers. I did this for two reasons. First, none of our other `libcollections` data structures attempt to share any data between copies. I feel we should instead investigate a separate library for persistent data structures instead of just having this one standing out on it's own.

Second, there is only one user of `List`, and it's `libarena`, and this change gets rid of an reference counted pointer in it's structure. It's minor, but it may make it a teensy bit faster.

While I was here, I added a bunch of documentation and extended the api to be a little more consistent with the rest of the sequence data structures. I also removed an old purity test that is now redundant.