Compute foldwise cross-products
Clean up helper functions
Include the mean of y when casting Cross to List
Separate arguments of coordinateDescent()

Previously, `lambda` was a `NumericVector` containing the weighted
penalty factor for each coefficient.  That was confusing in light of the
definition of `lambda` in the R code as the vector of (overall) penalty
factors over which to cross-validate.  So now in the C++ code, `lambda`
is a single value and `penwt` holds the weights.
Add convenience functions
Add cross-validation and fitting functions
Determine term names in makePolyTerms()
Move expandMatrix() to its own file
Add model.frame and model.matrix methods

Closes #9
Fix computation of number of observations by fold

The previous version was using the number of observations *in* the fold,
rather than the number used to fit the model when leaving *out* the
fold, causing all sorts of problems further on.  Didn't catch this in
initial testing because I ran it with just two folds, making it the
knife-edge case where n_in_fold and n_obs - n_in_fold are equal (d'oh!)
Improve handling of terms with no variation

These are now zeroed out, and eventually pruned later on in
fitPolywog(), instead of letting division by zero go on
Compute Var(y) when computing cross-products
Add cross-validation-specific struct
Clean up fitting backend

This includes some general efficiency changes, as well as changing the
convergence criterion from quadratic difference in beta to maximal
proportion reduction in the null deviance (the same as in `glmnet`).
Ideally these would have been done in two separate commits, but alas.
Streamline cross-validation

Previously, the calculation of the out-of-sample error in each
cross-validation fold involved recreating the polynomial expansion of
the corresponding rows of `X`.  The new code avoids this, at the (much
lower) expense of creating some additional cross-product objects in the
call to `scaleAndCrossProd()`.
Rewrite bootstrap function
Rewrite main frontend
Add some basic tests
Fix references to makePlainX()
Use model.frame() instead of $model when possible