IntervalIndex: outer intervals closed 'both' should be possible
#### The following ipython session demonstrates the issue

```python
import numpy as np
import pandas as pd

# a simple population of integer events
population = np.array([1, 2, 2, 3, 3, 3])

# let's make a histogram of the population
hist, edges = np.histogram(population, 4)

# lets turn the histogram into a dataframe using the edges as IntervalIndex
df = pd.DataFrame(data=hist, index=pd.IntervalIndex.from_breaks(edges))

# The 3 events are indexable properly
print(df.loc[3]) # Works

# To see the event at 1 you need to apply some offset
print(df.loc[1+1e-6]) # Works but ugly

print(df.loc[1]) # fails
```
#### Problem description

The current behavior of `IntervalIndex` is that all the intervals have the same closing. It is however desireable to have an `IntervalIndex` like `[[0, 1], (1, 2], (2, 3]]` including the lower and the upper limit. 

`cut()` solves this by adding an arbitrary offset to the lower limit to make it loo like `[(-0.002, 1], (1, 2], (2, 3]]`. Then the lower interval is left open but the value 0.0 is still contained by the interval. 

This however results in the fact that the intervals contains also values like -0.001 which might be undesired as due to semantics negative values might be impossible. Histograms that allow events in the closed range `[0,1]`, forbidding negative values are impossible to model with a `pandas.IntervalIndex`.

#### Expected behavior.

I'd like to be able to do something like
```
idx = pd.IntervalIndex.from_breaks(np.arange(10))
idx[0].set_closed('both')
