Refactor buildRegion to simplify building from different regionConfig types

Reopening (originally #1602) against v2.1 per @samccone's request in gitter. This fixes #1562.
A lot of frameworks have a custom error function that maps error codes to urls. I think we should look into it.

```js
new SpecialError('Foo needs to be bar', 'fooBarErr');
// >> "Foo needs to be bar. See https://marionettejs.com/docs/errors/foo-needs-to-be-bar"
```