Add some useful immutable types

These types need to be cleaned up more and definitely need unit tests
but I'm throwing them in before I forget