Feature/range1d datetime

This will require a bit of discussion, especially around the Date property.

Closes https://github.com/ContinuumIO/bokeh/issues/635
With this patch:
```diff
diff --git a/bokeh/objects.py b/bokeh/objects.py
index baee593..cfc0c85 100644
--- a/bokeh/objects.py
+++ b/bokeh/objects.py
@@ -12,7 +12,7 @@ logger = logging.getLogger(__file__)
 
 from . import _glyph_functions
 from .properties import (HasProps, Dict, Enum, Either, Float, Instance, Int,
-    List, String, Color, Include, Bool, Tuple, Any)
+    List, String, Color, Include, Bool, Tuple, Date, Any)
 from .mixins import LineProps, TextProps
 from .enums import BorderSymmetry, DatetimeUnits, Dimension, Location, Orientation, Units
 from .plot_object import PlotObject
@@ -107,9 +107,24 @@ class Range(PlotObject):
     pass
 
 class Range1d(Range):
-    """ Represents a fixed range [start, end] in a scalar dimension. """
-    start = Float()
-    end = Float()
+    """ Represents a fixed numeric range [start, end] in a scalar dimension. """
+
+    def __new__(cls, **kwargs):
+        start = kwargs.get('start')
+        end = kwargs.get('end')
+
+        if Date().is_valid(start) and Date().is_valid(end):
+            return Range.__new__(DateRange1d, **kwargs)
+        else:
+            return Range.__new__(cls, **kwargs)
+
+    start = Float
+    end = Float
+
+class DateRange1d(Range1d):
+    """ Represents a fixed date range [start, end] in a scalar dimension. """
+    start = Date
+    end = Date
 
 class DataRange(Range):
     sources = List(Instance(ColumnsRef))
diff --git a/bokeh/properties.py b/bokeh/properties.py
index e767318..7481237 100644
--- a/bokeh/properties.py
+++ b/bokeh/properties.py
@@ -1035,7 +1035,7 @@ class Date(Property):
     def validate(self, value):
         super(Date, self).validate(value)
 
-        if not (value is None or isinstance(value, (datetime.date,) + string_types + (float,) + integer_types)):
+        if not (value is None or isinstance(value, (datetime.date,))): # + string_types + (float,) + integer_types)):
             raise ValueError("expected a date, string or timestamp, got %r" % value)
 
     def transform(self, value):
```
we get:
```python
In [1]: from bokeh.objects import *

In [2]: from datetime import date

In [3]: Range1d(start=0, end=1)
Out[3]: <bokeh.objects.Range1d at 0x7f22811cddd0>

In [4]: Range1d(start=date.today(), end=date.today())
Out[4]: <bokeh.objects.DateRange1d at 0x7f228115d050>

In [5]: Range1d(start=date.today(), end=1)
ValueError: expected a value of type float, int or long, got 2014-06-20 of type date

In [6]: Range1d(start=0, end=date.today())
ValueError: expected a value of type float, int or long, got 2014-06-20 of type date

In [7]: DateRange1d(start=date.today(), end=date.today())
Out[7]: <bokeh.objects.DateRange1d at 0x7f228106e2d0>
```
Unfortunately I had to change `Date.validate()`, but this is per my earlier comment. Also `None` is potentially an issue here.