Add `background` and `flatten` APIs

Original discussion #91. Created new pull request against `lovell:alpha` as GitHub doesn’t let one change the target branch.

## Documentation

#### background(color) or background(r, g, b)

Set background color for operations such as `flatten`. Pass any valid CSS color as `color` string, e.g. `'#00ff00'`, `'hsl(120,100%,50%)'`, etc., or as numbers in the range of `[0, 255]` for `r`, `g`, and `b`. Defaults color to black.

#### flatten()

Flatten transparent images onto background with a color set using `background`.
Good point. I simply followed the pattern of the existing implementation, e.g.:

```cpp
     VipsImage *canvased = vips_image_new();
     if (rotated->Xsize != baton->width || rotated->Ysize != baton->height) {
       if (baton->crop || baton->max) {
         // Crop/max
         int left;
         int top;
         std::tie(left, top) = sharp_calc_crop(rotated->Xsize, rotated->Ysize, baton->width, baton->height, baton->gravity);
         int width = std::min(rotated->Xsize, baton->width);
         int height = std::min(rotated->Ysize, baton->height);
         if (vips_extract_area(rotated, &canvased, left, top, width, height, NULL)) {
         //                             ^^^^^^^^^
           return resize_error(baton, rotated);
         }
```

@lovell Will you address these in the refactor you mentioned? https://github.com/lovell/sharp/pull/91#issuecomment-56496548