Refactor buildRegion to simplify building from different regionConfig types

Reopening (originally #1602) against v2.1 per @samccone's request in gitter. This fixes #1562.
@samccone This error message needs to be updated from the changes too, but I'm afraid it could get too unwieldy.  Should it be more general and just link to the docs?  Something like `'Improper Region configuration supplied. Please review http://marionettejs.com/docs/marionette.region.html for possible Region configuration implementations.'`