Replaced the DataHandler class with a more generic DataSource class

The way have the data source set up currently is a bit of a leaky abstraction; stock and portfolio objects are both aware that data is being loaded from a file. This code encapsulates all of the data handling code in the abstract class DataSource. This has the advantage of allowing us to swap between different data source types: csv files, database, or remote api, without changing the application code.