Universal properties without funext, and localization

See <http://homotopytypetheory.org/2014/11/02/universal-properties-without-function-extensionality/> for a detailed description of the contents of this PR.
I think argument scopes are bound at generation time.  Here's my understanding of how the process works:
- There is a "stack" of interpretation scopes, and you try to interpret a given notation starting at the top, and working your way down whenever you can't find it in the current scope
- Scopes can be given to argument locations of a function; if the argument has a scope associated with it, this scope is pushed on the top of the stack before trying to interpret the argument
- Scopes can be "bound" to types; this impacts the default scope given to an argument.  Because `nat` is bound to `nat_scope`, whenever you pose or define a function with a `nat` argument, that argument location/number is given `nat_scope` as it's associated scope.

It seems that scopes for proof-local variables are assigned at variable creation time, and are not re-assigned when you unfold things in their type.  (If you `unfold ooExtendableAlong in H; revert H; intro H`, does this give it the correct scope?)