[4.2] Implement validation exceptions and passOrFail

Sometimes you want validation errors to bubble up, for example from a repository/model/entity through one or several service layer classes all the way up to the controller. Implementing a `getErrors()` method on 3 layers of classes gets extremely annoying. Validation exceptions make this easier - it doesn't matter where it's been thrown as long as it's inside a try/catch block somewhere. Example usage in a controller:

```php
public function someAction()
{
    try {
        $this->someService->doSomething(Input::all());
        return Redirect::route('someroute')->with('success', 'Success!');
    } catch (ValidationException $e) {
        return Redirect::route('thisroute')->withErrors($e);
    }
}

public function jsonAction()
{
    try {
        $this->someService->doSomething(Input::all());
        return Response::json(['message' => 'success']);
    } catch (ValidationException $e) {
        return Response::json($e, 400);
    }
}
```

or as a global exception handler:

```php
App::error(function(ValidationException $e) {
    return Response::json($e, 400);
});
```