Expand gift code application logic for multiple gift cards.

This is done largely by refactoring the apply_gift_code method to deal with multiple gift codes.

We still accept a gift_code paramaeter but it is normalized into a gift_codes array which may or may not be set before the normalization.
This way text fields are still easy to deal with, but selectors or multiple text fields can be added if desired.

As the only breaking change for compatability, the gift_code parameter is no longer passed in as an attribute on the order, but rather just as a regular param.
Any custom forms using order[gift_code] will not work.