Handle reading a transaction file.

A transaction file is a comma separate list of line items. The first row
is the set of headers (one of which needs to be `amount`). This
represents a line item. A line item _MUST_ have an amount.

The line item needs to have at least one other field, other than
`amount`, to designate some form of unique sale/transaction.

A line item was considered to be represented by an `OpenStruct`.
However, it needed to have some additional checks (such as requiring the
`amount` field) which `OpenStruct` didn't make possible directly.
Another feature that was needed was it should not be directly mutable
(i.e. via setters). These requirements were enough to create a
`LineItem` class with similar behavior to an `OpenStruct`. Two line
items are equal, if all of their fields and associated values match.

Due to several deprecations in the Money gem (such as parsing) and it's
global exchange state (which also doesn't handle gaps in the exchanges)
it will be dropped. Create a simple Money class to use instead.
Remove unused Money gem.