Fix performance of cart promotion handler select

Fixes an insanely large join against our big `spree_orders_promotions` table that was triggered on each cart operation.

Before:
```
Spree::Promotion Load (318.8ms)  SELECT DISTINCT "spree_promotions".* FROM "spree_promotions" LEFT OUTER JOIN "spree_orders_promotions" ON "spree_promotions"."id" = "spree_orders_promotions"."promotion_id" WHERE (starts_at IS NULL OR starts_at < '2014-12-10 18:05:01.076507') AND (expires_at IS NULL OR expires_at > '2014-12-10 18:05:01.076731') AND (("spree_promotions"."code" IS NULL AND "spree_promotions"."path" IS NULL OR "spree_orders_promotions"."order_id" = 1749907))
```

After:
```
 Spree::Promotion Load (0.8ms)  SELECT *  FROM ( SELECT "spree_promotions".* FROM "spree_promotions" INNER JOIN "spree_orders_promotions" ON "spree_promotions"."id" = "spree_orders_promotions"."promotion_id" WHERE "spree_orders_promotions"."order_id" = $1 AND (starts_at IS NULL OR starts_at < '2014-12-10 17:17:15.073813') AND (expires_at IS NULL OR expires_at > '2014-12-10 17:17:15.073973') UNION SELECT "spree_promotions".* FROM "spree_promotions"  WHERE "spree_promotions"."code" IS NULL AND "spree_promotions"."path" IS NULL AND (starts_at IS NULL OR starts_at < '2014-12-10 17:17:15.074036') AND (expires_at IS NULL OR expires_at > '2014-12-10 17:17:15.074111') ) AS "spree_promotions"
```

No specs touched as no semantic change was done.