added/fixed GtkMessageDialog

Conflicts:
	README.md
msgdialogs: OK->CLOSE, ask->NONE w/ optional buttons
ask_dialog limited to 2 buttons
a 3rd try at ask_dialog's function signature
MessageDialog now inputs a Dict of buttons
couple more small things
couple of small fixes

Conflicts:
	README.md
reordered input args; best practice README, @eval func defs, optional parent

Conflicts:
	README.md
use regards more consistently in dialogs (breaking), and other minor tweaks
modify list view test

Adds tests for `insert!` and selection
update lists.jl

This cleans up the interface for GtkListStore and GtkTreeStore a bit and fixes `selected` and adds `selected_rows`. This summarizes the changes (+ means added, - means dropped)

## store interface

push!(listStore::GtkListStore, values::Tuple)
unshift!(listStore::GtkListStore, values::Tuple)
insert!(listStore::GtkListStoreLeaf, index::Int, values)
+ insert!(listStore::GtkListStoreLeaf, iter::TRI, values)
empty!(listStore::GtkListStore)

delete!(listStore::GtkListStore, iter::TRI)
+ deleteat!(store, iter::TRI)
-splice!(listStore::GtkListStoreLeaf, index::Int)
+ deleteat!(listStore::GtkListStoreLeaf, index::Int)
+ pop! = deleteat!(store, length(store))

length(listStore::GtkListStore)
+ size(listStore) = (length(listStore, Gtk.ncolumns(GtkTreeModel(listStore))))

isvalid(listStore::GtkListStore, iter::TRI)

## indexing
+ getindex(listStore::GtkListStore, iter::TRI, column::Integer)) = getindex(GtkTreeModel(listStore), iter, column)
+ getindex(listStore::GtkListStore, iter::TRI) = getindex(GtkTreeModel(listStore), iter)
+ getindex(listStore, row::int, column) = getindex(listStore, iter_from_index(listStore, row), column)
+ getindex(listStore, row::int) = getindex(listStore, iter_from_index(listStore, row))

## what of setindex!

## no symmetry here
## get store from a view
getproperty(view, :model, Gtk.GtkListStore)
## set store for view, setproperty! fails
Gtk.G_.model(view, store)

## Tree store
push!(treeStore::GtkTreeStore, values::Tuple, parent=nothing)
unshift!(treeStore::GtkTreeStore, values::Tuple, parent=nothing)
insert!(treeStore::GtkTreeStoreLeaf, index::Vector{Int}, values; how::Symbol=:parent, where::Symbol=:after)

delete!(treeStore::GtkTreeStore, iter::TRI)
deleteat!(treeStore::GtkTreeStore, iter::TRI) = delete!(treeStore::GtkTreeStore, iter::TRI))
empty!(treeStore::GtkTreeStore)
+ deleteat!(treeStore::GtkTreeStoreLeaf, iter::TRI) ## delete at
-splice!(treeStore::GtkTreeStoreLeaf, index::Vector{Int}) ## delete at
deleteat!(treeStore::GtkTreeStoreLeaf, index::Vector{Int})

isvalid(treeStore::GtkTreeStore, iter::TRI)
isancestor(treeStore::GtkTreeStore, iter::TRI, descendant::TRI)
depth(treeStore::GtkTreeStore, iter::TRI)

getindex(treeModel::GtkTreeModel, iter::TRI, column::Integer)
getindex(treeModel::GtkTreeModel, iter::TRI)

setindex!(treeModel::GtkTreeModel, value, iter::TRI, column::Integer)
setindex!(treeModel::GtkTreeModel, values, iter::TRI)

## Selection
- selected(GtkTreeSelection): returned (model, iter) but with error
+ selected(GtkTreeSelection): return GtkTreeIter or error if no selection
select!(GtkTreeSelection, Iter)
+ selected_rows(GtkTreeSelection) return GtkTreeIter[] or error if no selection
selectall!(GtkTreeSelection)

unselect!(selection::GtkTreeSelection, iter::TRI
unselectall!(GtkTreeSelection)
Ptr{None} -> Ptr{Void}