Print sources for property fget/fset/fdel methods

This is a work-in-progress fixing issue #1555 which has been bugging me for quite a while. Here's what it is capable of now:

```python

In [1]: def foo(x): return id(x)

In [2]: p = property(foo, lambda x,val: None, id)

In [3]: p?
Type:       property
String Form:<property object at 0x2c52c00>
File:       /home/immerrr/sources/<ipython-input-1-8d2e34e1a2b1>
Docstring:  <no docstring>

In [4]: p??
Type:       property
String Form:<property object at 0x2c52c00>
File:       /home/immerrr/sources/<ipython-input-1-8d2e34e1a2b1>
Getter:     def foo(x): return id(x)

Setter:     p = property(foo, lambda x,val: None, id)

Deleter:    <function id>

In [5]: class Foo(object):
   ...:     @property
   ...:     def bar(self):
   ...:         return None
   ...:     

In [6]: f = Foo()

In [7]: f.bar?
Type:       property
String Form:<property object at 0x2f84aa0>
File:       /home/immerrr/sources/<ipython-input-5-64d3245b5460>
Docstring:  <no docstring>

In [8]: f.bar??
Type:       property
String Form:<property object at 0x2f84aa0>
File:       /home/immerrr/sources/<ipython-input-5-64d3245b5460>
Getter:
    @property
    def bar(self):
        return None

```

Admittedly, this is not perfect, so ideas about what's missing are welcome. What I think is missing:
- [ ] tests (didn't look how testing is done in IPython, nor do I have an idea how to test this properly)
- [ ] get rid of newlines that still appear after one-liner source snippets
- [ ] stop invoking property getter when querying as it may cause unintended side-effects and/or raise an error rendering the property inaccessible