naive solution for Union._boundary
add ProductSet._boundary
Boundary of empty set is empty set
Boundary of UniversalSet is EmptySet
Boundary of naturals/integers is self
ImageSet maps lambda onto boundary
boundary of Range is self
ProductSet(single_set) == single_set
ProductSet._union joins equal args if at top or bottom

     ProductSet(a, b, c) + ProductSet(a, d, e)
->   ProductSet(a, ProductSet(b, c) + ProductSet(d, e))
un-XFAIL boundary-line test
Pow.is_real: reformulation of the problem for negative exponent

    closes #2730
add Set.is_closed property
bigger docstring for Set.boundary
add interior and closure to Sets
add Set.is_open
Merge pull request #2738 from skirpichev/3997-test

Test issue 3997
Merge pull request #2655 from shiprabanga/master

Committed assert handled
Add shiprabanga to the AUTHORS/aboutus. Welcome to SymPy!
Merge pull request #2745 from skirpichev/gh2730

Pow.is_real: reformulation of the problem for negative exponent
More tests for oo/-oo (rhs of inequations)