Merge branch 'ImprovedReflection'
Make the type of ierror more general

Before, ierror could only be used where Idris () was expected. However, it
should be usable in any situation as it halts execution.
Clean up implementation of type providers

The type provider elaboration has been made more readable and the supporting
Idris library has been simplified.
Further simplify of type provider elaboration

Nested "if" and "do" blocks have been eliminated.
Tiny further simplification of type provider elaboration
Add primitive type names to name completion

This is necessary because these are treated specially by the parser and are
thus not in the global definition context, from which name completion is
drawn.
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.
Merge pull request #317 from david-christiansen/providers

Providers update
Merge pull request #318 from david-christiansen/completion-work

Add primitive type names to name completion
Merge pull request #320 from raichoo/vim

vim: highlight chars and infixed functions
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