Discount distribution

Total discount amount is now distributed over all discount lines in a
similar fashion as when done over items: to make sure that the full
amount is distributed while minimizing rounding error.

Also added `Cart.totalGrossVatAmount` and `DiscountLine.effectiveDiscountAmount`

ping @xiaodong-izettle, @MrShish  or @puj 

This change makes this package contain everything vital for us to be able to use it in other projects as far as I can see.

Also: Suggestions for clearer naming convention (especially on the main Cart object) are welcome!

  

You're right, that's what I'll say :)
Did some tests. First I added a second method:
```java
	static <T extends Item<T>> Long summarizeGrossVatNoAutoboxing(final List<ItemLine<T>> itemLines) {
		long totalGrossVat = 0;
		boolean hasVat = false;
		for (ItemLine<?> itemLine : itemLines) {
			Long itemGrossVat = itemLine.getGrossVat();
			if (itemGrossVat != null) {
				totalGrossVat += itemGrossVat;
				hasVat = true;
			}
		}
		return hasVat ? totalGrossVat : null;
	}
```
Then, I executed the following test:
```java
	@Test
	public void performanceTestAutoboxingAlernatives() {
		List<TestItem> items = new ArrayList<TestItem>();
		for (int i = 0; i < 10; i++) {
			items.add(new TestItem(100, (float) (Math.random() * 100), BigDecimal.ONE));
		}
		Cart<TestItem, TestDiscount> cart = new Cart<TestItem, TestDiscount>(items, null);
		List<ItemLine<TestItem>> itemLines = cart.getItemLines();
		int iter = 1000000;
		long time = System.currentTimeMillis();
		for (int i = 0; i < iter; i++) {
			Long summarizeGrossVatNoAutoboxing = CartUtils.summarizeGrossVatNoAutoboxing(itemLines);
		}
		System.out.println("Time with no autoboxing: " + (System.currentTimeMillis() - time));
		time = System.currentTimeMillis();
		for (int i = 0; i < iter; i++) {
			Long summarizeGrossVat = CartUtils.summarizeGrossVat(itemLines);
		}
		System.out.println("Time with autoboxing: " + (System.currentTimeMillis() - time));
	}
```
And the output (on my machine) was:
```
Time with no autoboxing: 24
Time with autoboxing: 76
```
So, while you are correct in that no autoboxing is faster (here around x3), I'd say it's insignificant. We're talking about 70 ms for calculating vat on a million carts with 100 items in each... The real world scenario is probably more like 1 cart with 2 or 3 items.

So, I'd suggest clarity of code is much more valuable here. Thoughts?