Implemented Keyword Substitution feature

@jrbl @jinpa 

![screen shot 2014-07-18 at 4 02 35 pm](https://cloud.githubusercontent.com/assets/3598201/3632888/a5fc93d8-0ecf-11e4-8154-69c818781e70.png)
![screen shot 2014-07-18 at 4 02 11 pm](https://cloud.githubusercontent.com/assets/3598201/3632889/a5fca044-0ecf-11e4-9238-d42c842bf8c3.png)

With this commit, instructors can include keywords in their bulk emails and
announcments that will be automatically substituted to the corresponding value
in the database. This commit introduces: %%USER_ID%% => anonymous_user_id and
%%USER_FULLNAME%% => user profile name.

This substitution in done by common/djangoapps/util/keyword_substitution.py. It
has a map between keywords and functions that will be called on the original
string (html document), and replace each keyword with the return value of the
function. In order to add more keyword substitutions, we can just add
"%%keywords%%" and their function mappings to the map in the future.

In the future, we can use this module to introduce keyword substitution feature
in other places.

** Since this feature deals with anonymous user ids, it's dependent on: 
https://github.com/edx/edx-platform/pull/4485
Yeah, this seems like an odd/bad dependency.

A technique we've used in other places is to have a core library that defines some functionality or an API (such as keyword substitution), and then have other parts of the code register plugins for that. Then the code that knows about `anonymous_id_for_user` would add register a substitution with the central handler, or the application (such as the lms) would bind the two together.