Handle syntax errors in manifests more gracefully

When we get a `SyntaxError` from `readJson`, the error object itself will be decorated/modified for better printing. (every other case still behaves the same)

In the `duo(1)` CLI, it will treat the decorated `SyntaxError` as a special-case, and print w/o a stack trace. Instead, it includes the error and filename relative to `pwd`. I thought about using root instead, but figured since we were printing on the CLI, it would make more sense to be relative to the `pwd`.

This fixes #408 
should do something like:

```js
var err
try {
  yield build('...').run()
} catch (e) {
  err = e
}
assert(err instanceof SyntaxError)
```

otherwise this will pass even if `.run()` doesn't throw