3741 - put FunctionClass-like object's nargs into sets

- [x] figure out how to import and use S.Naturals0 and FiniteSet in function.py
- [x] test nargs=0 case
- [x] fix doctests


Here is the cheatsheet for functions now:

```
                        class type                     property
               ----------------------------------- -------------------
what           Function FunctionClass AppliedUndef is_Function nargs
============== ======== ============= ============ =========== =======
f              0        1             0            1           Naturals0()
f(x)           1        0             1            1           Naturals0()
sin            0        1             0            1           {1}
sin(x)         1        0             0            1           {1}
log            0        1             0            1           {1, 2}
log(x)         1        0             0            1           {1, 2}
(*)Piecewise(((x, x < 0)))
               1        0             0            1           None
(*)WildFunction('f')
               1        0             0            1           Naturals0
(**)Lambda(x, x+1) 
               0        0             0            1           {1}

(*) Piecewise & WildFunction cannot be called
(**) Lambda can be called but does not result in a function unless the body returns a function.

```

This is a replacement for #2201

http://code.google.com/p/sympy/issues/detail?id=3741