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.
javascript: make FFI work with HOFs
javascript: fix semicolons
javascript: handle tailcalls for FFI
javascript: assign HOFs properly
javascript: handle arrays correctly in FFI
javascript: address fields directly via ['fieldname']
Merge pull request #322 from raichoo/javascript

javascript: make FFI work with HOFs
Merge pull request #324 from andreas23/master

Fix for Data.Bits
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