Updates the FileDataWriter so we can unit test it without creating a file

Allows us to use mocks within our unit tests. If we do want to add tests
where we test a file is created, we can pass in a real file appender
instead.
Adds unit tests for SerialDataWriter
Pulls out balloon controller creation into factory class

This helps to keep the balloon controller class focused on the logic of
running the balloon. The factory takes over the job of pulling in
dependencies and creating a balloon controller from them. The factory class
makes the call on which concrete types of sensor and writer to use.