Merge branch 'ImprovedReflection'
Remove "return" from Monad

Monad has Applicative as a superclass. The methods "pure" and "return" are
supposed to do the same thing. This change does the following:

1. Remove "return" from Monad
2. Remove "return" from all instances of Monad in the standard library
3. Define a compatibility function "return":

return : Monad m => a -> m a
return = pure

This enforces that "return" and "pure" do the same thing.
Take care with 'let' in specialiser - avoid duplicating a redex
Let now only reduces if the binding appears at most once in scope during
specialisation
Take care to avoid duplicating redexes when reducing lambdas
Binders in values are annotated with a 'reducible' flag, which is set
to False if simplifying and the argument appears more than once.
javascript: added javascript lib package
javascript: add hack to check for undefined
javascript: added experimental JSON datastructure
javascript: added index to JSONArray
javascript: added ++ for JSArray
javascript: indentation
javascript: fix compilation error
Merge pull request #326 from raichoo/javascript

javascript: added javascript lib package
Merge pull request #319 from david-christiansen/remove-return

Remove "return" from Monad
A couple small typo fixes in the tutorial
another small typo fix in tutorial
Some unification fixes
Type class resolution fix (disables Decidable.Decidable)
Instances should not be resolved when there is no information available.
Previously, resolution just guessed at an instance in this case, though
this was never intended behaviour!
Merge pull request #329 from byorgey/patch-1

A couple small typo fixes in the tutorial
Merge pull request #330 from byorgey/patch-2

another small typo fix in tutorial
Fix invalid C codegen for unary floating point operators