Deltas and gammas are produced only for fixed and Ibor coupons without caps or floors, for Ibor coupons they are ignoring convexity adjustments (like in arrears adjustments). It is possible to have different Ibor coupons (with different forward curves) on a leg, but the computed deltas would be aggregated over all underlying curves then.
Derivatives are not w.r.t. basispoints, but w.r.t. the usual unit
BPS is the value of one unit (not one basispoint actually), it has to be divided by 10000.0 to get QL's BPS
moving_ member variable of TermStructure had an inspector method, then we could enforce that all underlying curves here are either floating or fixed reference date curves. the given atm vol structure should be strike independent, this is not checked
the given cube must provide smile sections that provide an ATM level