Set boundaries

Provides new `boundary` property for sets.  I could use some theoretical help on this.  I think I'm defining the set of limit points of a set.

```Python
Interval(0, 1).boundary == FiniteSet(0, 1)

FiniteSet(0, 1).boundary = FiniteSet(0, 1)

square = Interval(0, 1) ** 2
square.boundary == Interval(0, 1) * FiniteSet(0, 1) + FiniteSet(0, 1) * Interval(0, 1)

S.Reals.boundary == FiniteSet(-oo, oo)
```