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
Fix totality of updateWith/rebuildEnv in Effects
javascript: handle tailcalls for FFI
javascript: assign HOFs properly
New size change graph builder
Looks at patterns, rather than case tree, and therefore finds it easier to
spot structurally smaller arguments which are more complex.
javascript: handle arrays correctly in FFI
javascript: address fields directly via ['fieldname']
Fix Data.Bits: properly convert to machine-buitin types everywhere.
Fix Codegen: Shr is now called LShr, emit that.
Merge branch 'master' of git://github.com/edwinb/Idris-dev
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