Merge Settings branch

This branch contains the skeleton of a settings implementation. Everything needs to be merged so that these features can begin to be tied together.