Raises a warning if unnecessary kwargs are supplied

@bryevdv I have implemented as per your diff in the comment in #646.

It seems to be working fine, but will require some tests to be added, as per your suggestion. Working on the same.
Those keyword arguments aren't unnecessary. Unnecessary would be a good term if they were supported by a glyph, but not required, possibly redundant. Thus this should be an error (raise an exception, perhaps a `ValueError` or maybe `AttributeError`), not a warning. Why second word starts with a capital letter, but then you have `args`, which would sound much better if it was `arguments`, and then there is no space between `:` and the list of argument names?

> `str([i for i in _unnecessary_kwargs])`

What was the intent here? You have a container, which you iterate over applying identity function. Then you apply `str()`, which doesn't give very nice results, e.g.
```
In [8]: "whatever:" + str([i for i in {"a", "b"}])
Out[8]: "whatever:['a', 'b']"
```
I presume you wanted something similar to this:
```
In [15]: "whatever: %s" % ", ".join(sorted({"a", "b"}))
Out[15]: 'whatever: a, b'
```
Bokeh already has this kind of validation on a lower-level, e.g.
```
In [19]: Plot(x=1)
AttributeError: unexpected attribute 'x' to Plot, possible attributes are right, min_border_bottom, title_text_align, title_text_baseline, v_symmetry, plot_width, border_fill, plot_height, outline_line_join, title_text_font_size, tools, outline_line_dash, outline_line_dash_offset, title, x_mapper_type, background_fill, above, outline_line_width, x_range, title_text_font_style, title_text_alpha, data_sources, outline_line_color, title_text_font, min_border_left, title_text_color, min_border_right, h_symmetry, y_range, min_border, png, session, y_mapper_type, outline_line_alpha, name, renderers, below, min_border_top, outline_line_cap or left
```
so it would be good to either take advantage of this or unify when and how errors are reported on both levels.