1. There is an option "Buy Products for Discount on All Selections" which does what you want. Except that you have to define it for each type of products you want discounts applied. So for example, you have to create a discount for product X and another discount for product Y separately.
2. The quickest solution for this would be to create your own implementation of the discounts. You can decompile the code for "Buy X number of the product to get the cheapest free" and create your own based on it. Here is the documentation how to create custom promotions: http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-Commerce/9/Marketing/custom-promotions/
In respect of your point 2.
The URL http://webhelp.episerver.com/latest/commerce/marketing/discounts.htm shows an example of the discount type that I believe you are alluding to. The Page's Content goes on to explain the basis upon which the "free" Items are selected and discounts are calculated. The explanation is quite complex and its implications both subtle and profound. I for one had to work very hard at understanding it and absorbing all that it meant. As you don't detail the exact scenario you are experiencing I cannot be sure about whether your experience is as per design or otherwise.
I would urge you to examine the details of the above URL very thoroughly as it may well be that Episerver Campaigns is operating the way that Episerver designed it to work.
To expand and explain a bit on this particular case in relation to the article Martin Pickering linked: The article mentions Episerver Commerce will maximize customer savings. One of the reasons for that behavior in this particular scenario is that the customer should not be tempted to split the purchase into several orders to get a bigger discount. With the logic you describe, the customer could make two separate purchases of (3 x A) and (1 x A + 2 x B) and get one A and one B for free - exactly what the Episerver Commerce behavior gives regardless of if the customer does the split order or places all six items in the same order.
In easier words, if you have Buy 3 get cheapest for free, it will take the 3 most expensive items in the cart which is included in the promotion and the customer will get the cheapest from them for free.
This is, as Magnus said, to prevent users making several orders to for example having an order with the 3 most expensive items and another order with the rest.
We have upgraded the Episerver to 10 and using the new promotion module. Now we have couple of issues to deal with.
1. we can't find the option to allow lineitem discount for X number of lineitem ordered (e.g if we buy 3 Products X then 10% discount on same product). THis option was available in old promotion module.
2. We have noticed that Buy X number of product to get the cheapest free is not working correctly. (if we buy 3 products than the cheapest is free. This is working if we are buy only 3 products and if we are buy 6 products (4 Product A and 2 Product B - cheapest) so ideally it should allow both the Product B as free but right now it is allowing discount for 1 item of Product A and one item for Product B.
Please let us know any availabl solution for the above points as we are stuck into it. Thanks in advance.