Cart: Use BigDecimal under the hood as much as possible

Instead of Doubles
Cart: Discount per item

Introduces the possiblility to have a discount attatched to an item.
This discount will only be applied on the local itemline: the resulting
amount will be considered as it's gross amount, which is the value used
when doing all cart-wide calculations such as global discount
distribution etc.

TODO: Conclude if we want to add a method on the Cart for summarizing
*all* discounts, including the oned local to item lines.
Cart: Allow separate type for the item discount

To not enforce the same discount type on both the global cart and per
item line
Cart: Added javadocs for public methods and classes
Cart: Fix calculations for multiple cart-wide discounts

All discounts (positive or netagive) are now applied to the cart's gross
amount, one at a time. This makes for example two consecutive 10%
discounts result in a 19% discount instead of the previous 20%.

* Added some more javadoc for non-public methods
* Canged from `new BigDecimal(long/double)` to
  `BigDecimal.valueOf(long/double)`, as this is the preferred way.

Closes #82
Cart: Improved README

Made it up to date with the last logic changes

Also added javadoc for public method in ItemUtils
Cart: Change to current 3 generics arguments

Since some added lines from another merged PR
Cart: round local discount before subtracting

As that's the way it's done on the cart-wide level
Merge pull request #81 from iZettle/discount-per-item

Discount per item