Scoped messages

Allow scoping of messages. Took longer than I thought, but I think I like the final implementation.

Highlights:
 - Tests work now
 - Automatically sanitize the flash messages with `ngSanitize` (needed for the above)
 - Flash messages are not stored on the rootScope and can be overridden by passing in a custom scope.

Notes/Questions:
 - I'd like to use a getter for `messages`, but it doesn't seem like there's a well supported way to do this (browser compatibility issues with `object.defineProperty` and `get messages()`)
 - Only tested via tests, working on manual testing now
 - Weaker unit tests compared to integration tests. This is because I started with integration tests. I don't think adding additional unit tests is going to provide more coverage. Let me know if you disagree.

cc @ejholmes @jerrysu 
Hmm, good point. But that's not the only usage of `messages()`, we also push to this array in `add` and splice it in `remove()`. (This is essentially the old `flash.messages`)

We'd still end up with duplicated `this.scope._flash.messages` in those places. Why do you think `messages()` doesn't belong here? Is it because `FlashMessage` shouldn't know about all the messages?