Ensure user definitions dict is keyed by strings (not symbols)

Fix a case in Plot3D which was violating this assumption, and add
asserts to guard against this in future.
Add contexts to attributes
Predefine builtin option names

Otherwise in SomeBuiltin[..., SomeOption->Value], SomeOption would be
taken as Global`SomeOption.
add asserts
Fix error looking up General:: messages
Add second-order poly derivative test + commentary to D[] docs
Predefine Constant
Add System` where necessary, fixing ListQ/NotListQ

Fixes problems with builtins that used ListQ and NotListQ in their
rules.
Allow multiple -e options and -e with --persist

Also be a bit more precise about the semantics of -e in the help text.
Fix explicit Global` in Power format rule

Rules for builtins are parsed as if $Context was set to System`. The
explicit Global` prefix here was breaking this format rule: it was
equivalent to

  Global`x_^(1/2) -> System`Sqrt[System`x]

which was bogus, as it would always return Sqrt[System`x].
Predefine Automatic, Tiny, Small, Medium and Large

This is so they end up in System`.
Assert on non-fully-qualified vars in replace_vars
Fix a < b < c parsing as Inequality[a, Less, b, Less, c]

It should be Less[a, b, c]
Fix builtin grouping specification

A builtin that says something like:

  grouping = 'NonAssociative'

now gets its grouping set to System`NonAssociative, instead of an
invalid symbol.
Shorten symbols in messages according to $Context/$ContextPath
Fix mishandling builtin formats for specific forms (e.g. InputForm)
Make Context HoldFirst
Improve error-checking in ensure_context
Remove unnecessary complexity in fix for issue #151
TEST CHANGE: Reorder terms in Together test

The result is the same mathematically, but the order of terms has
changed, because the underlying symbol names are different. 'Plus'
sorts before 'f', but 'Global`f' sorts before 'System`Plus'.