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`.
@gasi I think I mentioned this in one of your earlier PRs? This is an extra copy of the image for callers who *aren't* flattening their images, which seems wasteful.

I think you could rewrite lines 505-525 like so:

```c++
    // Flatten
    // We skip non-four-band images as we haven’t tested two-channel PNGs with
    // alpha channel (yet).
    // See: https://github.com/lovell/sharp/pull/91#issuecomment-56496548
    if (baton->flatten && sharp_image_has_alpha(shrunk_on_load) && shrunk_on_load->Bands == 4) {
      VipsImage *flattened = vips_image_new();
      VipsArrayDouble *background = vips_array_double_newv(
        3, // vector size
        baton->background_red,
        baton->background_green,
        baton->background_blue
      );

      if (vips_flatten(shrunk_on_load, &flattened, "background", background, NULL)) {
        return resize_error(baton, shrunk_on_load);
      };
      // Free the original image
      g_object_unref(shrunk_on_load);
      // shrunk_on_load now refers to the flattened image
      shrunk_on_load = flattened;
    }
```

and then revert to using shrunk_on_load below as before.