Add a simple LinkedList utility.

This will be a building block for making lists of intermediate code
elements that can easily be manipulated by optimization passes. In
particular, we can insert, remove and replace list items in constant time
which will be particularly useful for shuffling around code fragments.