Adds support for nested chalk expressions.

green(a + blue(b) + c) will now look the same as green(a) +
blue(b) + green(c), as expected. In the previous implementation the
output would have been green(a) + blue(b) + c, because the reset code of
the second expression would close all expressions around it as well.

Now this reset code is replaced by a start code of the outer lying
expression, both stopping the inner and re-starting the outer.

For example:

![screen shot 2014-06-21 at 06 21 53](https://cloud.githubusercontent.com/assets/3891755/3347835/d235d92a-f8fc-11e3-9151-938c3d9a4c32.png)

Where previously everything after the inner green text would have been white.
I agree that recreating the RegExp object each time is inefficient, although the interpreter would probably catch on and lift the object. Let me update the pull request regardless, as you're definitely right that it's cleaner.

What the `code.close.replace` call does is escape the `code.close` string for use in a RegExp. The outer `str.replace` then replaces all (escaped) instances of `code.close` with `code.open`.

Essentially it's just:
```javascript
originalString.replace(code.close, code.open);
```
Except the `code.close` string is first escaped for use in a RegExp and then turned into a RegExp with the `g` flag.



See:
https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex

Note:
Looking back at my code, I definitely could've explained this better.