* Fix a bug in the OCaml pretty-printer.
* sujet.pdf: Minor remarks about identifiers.
* value_definition: Fix an invalid threading of the typing environment .
Merge remote-tracking branch 'yurug/master'

Conflicts:
	src/elaboration/elaborateDictionaries.ml
	test/inference/good/coreml_record_define.mle
	test/inference/good/typeclass_infer_canonical.mle
	test/inference/good/typeclass_instance_declaration.mle
	test/inference/good/typeclass_instance_with_inheritance.mle
	test/inference/good/typeclass_needs_constraint_hoisting.mle
	test/inference/good/typeclass_polymorphic_recursion.mle
	test/inference/good/typeclass_predicate_annotations.mle
	test/inference/good/typeclass_several_blocks.mle
	test/inference/good/typeclass_use_instance.mle
Correct a few mistakes

* In the function value_definition, the bound type variables
 must be local to the binding.
* In the definition of instances, forgot to insert the instance
 parameters in the local environment.
* In the elaboration of dictionaries, in the case an instance is used,
 the parameters in the class predicates must be replaced by the provided
 arguments.
* Fix an inconsistency in parsing precedence: 'f x . y' was parsed as '(f x). y' and pretty-printed the other way.
* Extend the deadline.
* Fix an invalid type variable name generation in the type inference engine.
* Fix missing checking that records contain the right fields.
* Fix two negative tests that were rejected for invalid reasons.
* InferTypes: Fix an abusive generalization of type variables. It
  was meant to handle programs like this:

let external ['a] (read : unit -> 'a) = "fun () -> input_value stdin"
let external ['a] (write : 'a -> unit) = "fun x -> output_value stdout x"
let echo = fun (x: unit) -> write (read ())

  But this abusive generalization triggerred several incorrect behaviors
  on other programs. For instance:

let external ['a] (read : unit -> 'a) = "fun () -> input_value stdin"
let external ['a] (write : 'a -> unit) = "fun x -> output_value stdout x"
let echo = fun (x: unit) -> write (read ())
let main = echo ()

  was rejected because it was impossible to find a type to instantiate
  echo.
* For the moment, only the elaboration phase was checking that
  value restriction was respected. Now, we make type inference
  aware of value restriction in order to accept some extra programs
  like:

  let id = fun x -> x
  let id2 = id id
  let main = id2 0
Merge remote-tracking branch 'yurug/master'

Conflicts:
	src/elaboration/elaborationEnvironment.mli
	test/inference/bad/coreml_value_restriction.mle
	test/inference/bad/typeclass_use.mle
	test/inference/bad/typeclass_use_r.mle
	test/inference/bad/typeclass_use_rw.mle
	test/inference/good/coreml_adt.mle
	test/inference/good/coreml_forall.mle
	test/inference/good/coreml_pair.mle
	test/inference/good/coreml_polymorphic_recursion.mle
	test/inference/good/coreml_record_access.mle
	test/inference/good/typeclass_canonical_typing_context_in_scheme.mle
	test/inference/good/typeclass_infer_canonical.mle
	test/inference/good/typeclass_needs_constraint_hoisting.mle
	test/inference/good/typeclass_polymorphic_recursion.mle
	test/inference/good/typeclass_predicate_annotations.mle
	test/inference/good/typeclass_predicate_annotations_priority.mle
Merge branch 'master' into failing_at_inference