Basic context support

This is some work-in-progress code to support contexts. It's not passing all the tests yet, and I'm not completely happy with it, but it'd be good to know if the approach I've taken is workable.

What I've done is:

- Made symbol names include the full context they're in (to avoid breaking the assumption in Python code that symbols that compare equal are the same). I'd guess that this is the most controversial part - I couldn't think of a reasonably low-impact alternative, so I think this could be the least bad option.
- Added some code to `Definitions` to look up symbol names in `$ContextPath`, and shorten them if they're accessible.
- Predefined some system symbols so that they appear in the right context.

Most of the change involves qualifying with ``` System` ``` all the hardcoded symbol names in the source, except for:

- `Symbol("x"), Expression('x', ...), has_form('x', ...)` -> these all assume ``` System`x ``` if they're given a string without a context mark. This was just to reduce the number of cases which needed ``` System` ```.
- `class MyBuiltin(Builtin)` - this creates ``` System`MyBuiltin ``` unless the class changes the `context` attribute.
- Docstrings -> these are parsed with a dummy `Definitions` instance which says that every symbol is in ``` System` ```.

Some stuff that I haven't tried to do yet:

- Shadowing warnings
- BeginPackage, EndPackage etc

If I understood correctly, the parser already handles working out the context for a symbol (by calling `Definitions.lookup_name`). This comment is just about what Mathematica does in an edge case when you change the current context (by assigning a string), but the new context name begins with a context mark, so it's not a valid context name by itself.

Although the `$Context` docs don't say this is how it works, http://reference.wolfram.com/language/ref/Begin.html has an example of defining private symbols by saying ```Begin["`Private`"]```. There's also http://reference.wolfram.com/language/tutorial/SettingUpWolframLanguagePackages.html which goes into this as well. After reading these my guess is that this behaviour is just "magic" in the Mathematica kernel, and I thought people reading it might wonder why we're doing this, so I wrote that comment to explain it.