add simple keyword arguments

Function calls: keyword arguments are collected and passed via a new
`Keywords` object:

    julia> f(kw::Keywords, args...) = (args, kw)
    # method added to generic function f

    julia> f(1, a=3, 2, b=4)
    ((1,2),Keywords(a=3, b=4))

Method definitions: here, a keyword argument creates a new local variable
whose value is overridden if called with a keyword of the same name:

    julia> g(kw::Keywords, args..., x=0) = (args, kw, x)
    # method added to generic function g

    julia> g(1, a=3, 2, b=4)
    ((1,2),Keywords(a=3, b=4),0)

    julia> g(1, a=3, 2, b=4, x=7)
    ((1,2),Keywords(a=3, b=4, x=7),7)

Internally,

    function g(kw::Keywords, a, b, x=0)
        ...
    end

get converted to

    function g(kw::Keywords, a, b)
        x = get(kw, :x, 0)
        ...
    end

Methods lacking the `::Keywords` catch-all only accept their specific
keywords:

    julia> h(args..., x=0) = (args, x)
    # method added to generic function h

    julia> h(1, 2, x=7)
    ((1,2),7)

    julia> h(1, a=3, 2, x=7)
    ERROR: unrecognized keyword a
     in h at no file
also define a no-keyword fallback method for closed keyword functions
allow type assertions in keywords arguments
another stab at keyword args, built on ordinary varargs
support simultaneous use of keywords and varargs
fix behavior of keyword args with declared types
add tests for keyword args
add lots of comments
classify object allocations as pure if their arguments are
Merge branch 'master' of github.com:JuliaLang/julia into jb/kwargs
Merge branch 'master' of github.com:JuliaLang/julia into jb/kwargs
Merge branch 'master' of github.com:JuliaLang/julia into jb/kwargs
Merge branch 'master' of github.com:JuliaLang/julia into jb/kwargs
some cleanup, and make NKeywords an immutable struct
Merge branch 'master' of github.com:JuliaLang/julia into jb/kwargs
some work on #671. does not work yet.
new tuple type hierarchy working. #671
a couple fixes to new tuple type hierarchy
another small fix
Merge branch 'master' of github.com:JuliaLang/julia into jb/tupletypes
Merge branch 'master' of github.com:JuliaLang/julia into jb/kwargs
Merge branch 'master' of github.com:JuliaLang/julia into jb/tupletypes