At tailcall

Add an attribute `[@tailcall]` such that `f args [@tailcall]` warns (with the new warning 50) if the call is not tail-recursive. See [the ocaml hacking item](https://github.com/ocamllabs/compiler-hacking/wiki/Things-to-work-on#add-support-for-tailcall-annotations).

The patch is twofold:
- A `Lapply` expression (in lambda code) is annotated with a record, rather than a location,
  with a boolean within this record that specifies whether the call is expected to be in tail position. This flag
  is set if the corresponding `Typedtree.expr` has a "tailcall" attribute.
- In `Simplif`, if the warning is enabled, tail calls are annotated, and if a call is expected to be in tail position
  but isnt't, the warning is emitted.

Also added two tests in `testsuite/tests/warnings/`.
I worry that someone making this sort of mistake (thinking `n * fact (n-1)` is a tail-call) might be likely to write
`n * (fact (n-1)) [@ tailcall]` or
`n * fact (n-1) [@ tailcall]` which would not lead to a warning since `[@ tailcall]` would bind to `*` which is indeed in tail position.

It would be clearer if the annotation had to come immediately after the function name instead of after the arguments:
`n * (fact [@ tailcall] (n-1))` or
`n * fact [@ tailcall] (n-1)`

That's not how attribute syntax works though: http://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec241
but it looks as if it would allow
`n * begin [@ tailcall] fact (n-1) end` which is equivalent to
`n * ([@ tailcall] fact (n-1))`
which might be the best way to use `[@ tailcall]`.