Add an event to check if we can cancel a sale

When calling Sale.can_cancel, SaleCanCancelEvent will be emitted and, if
it returns False, we can't cancel that sale.

Add an extra keyword on cancel to force it and avoid asserting can_cancel (and
thus, avoid emitting SaleCanCancelEvent) for cancelling ecf last sales.

Also, fix SaleView.can_* methods. The logic on the same methods on Sale are not
that simple and they could lead to other problems as we use those can_* to set
sensitivity on gui buttons/actions.

Change-Id: I0f3e8f2d6ac2392c8d63b6fe6a1416f49e45abc1