Feature - Better exception building

This PR changes Paulus 2's style of creating and handling of exceptions.

First of all, instead of just providing default `$message` or `$code` properties, we provide publicly available constants. This does a few things:

- External libraries can create exceptions using the messages defined in the constants
- The constants are statically compiled (all the better for opcaching)
- The values are always available, instead of having to first instantiate the exception first

Not only that, but this allows us to pass previous exceptions down the chain easier using the newly implemented static `create()` method. See, by default, the [`Exception::__construct()`][php-exception-constructor] method takes a few optional parameters. PHP doesn't have any way of "skipping" parameters, so if you wanted to instantiate an exception with its default message and code but with a passed in `$previous` value, you couldn't without nullifying the message and code (therefore removing the default messages). The new create method along with the publicly and statically available constants allows this entire process to work.

So previously:

![screen shot 2014-09-04 at 5 09 55 pm](https://cloud.githubusercontent.com/assets/742384/4156854/fadf26e0-3477-11e4-9ed7-44872c0dd776.png)

But now:
![screen shot 2014-09-04 at 5 10 41 pm](https://cloud.githubusercontent.com/assets/742384/4156855/ff4075c2-3477-11e4-869d-5bbd3e9d1cab.png)

This also improves our logger by making sure to now loop over our previous exceptions and log their stack traces too. Before this, we had a problem with context as to what was failing.

[php-exception-constructor]: http://php.net/manual/en/exception.construct.php
I absolutely love this Trait. Everything about this setup has been designed very well :+1: