Update data science solution

Generally, this many errors are indicative of something not modeled well. In this case, the hash-as-arguments style (which I noted above) is getting in your way. Most of this could probably be encapsulated by just rescuing and raising a more descriptive error:
```
def parse_data(filename)
  data = File.read(filename)
  JSON.parse(data).each { |record| populate_data(record) }
  @ab_test_data
rescue Errno::ENOENT
  raise InvalidFileTypeError
rescue JSON::ParserError
  raise InvalidFormatError
end