right and bottom methods for Dimensions

* metaprogrammed since everything else would have really just been
  copy and pasting the left/top methods. What do you think? Is it
  readable enough?
* removed specs were kind of flawed from the beginning, using a
  flawed/not up to date behavior for right/bottom.
left/top report nil if not set instead of 0

* changed from previous code that reported 0 in an attempt to
  be compliant with shoes3 and was at fault with that... the first
  element reports 0 for left/top but that's because that's the
  x-y coordinate at that point
* so why does it report nil now and not the x/y? Because that's
  what absolute_left/top are for. And I think it's super confusing
  that you can set a top value of say 50 and then it'd report
  another value when asked about it under circumstances. Because
  top/left are set relative to the start of the slot they are in,
  so the actual real top of an element is the top of its slot plus
  its own top value... it's confusing
* this breaks compatibility but I believe it's a change worth
  making. Need opinions though.
right/bottom init and flow specs

* specs for initing an element with them
* also some specs on how they behave within a flow
little method extraction for absolute placement of elements in slots
Position elements that do not take up space

* see simple-form.rb - backgrounds want to be positioned as well
  the current position does not get updated though
Merge branch 'master' of github.com:shoes/shoes4 into right_and_bottom
Elements now report their need to be positioned

* needed for backgrounds which sometimes don't need to
shared sample was just used in one place --> remove it
Moves takes_up_space? to the instances where it belongs

* also let the border not be positioned
fill_setup in ancestor does the same already
gc --> graphics_context renamings
Could not find a usage of this method - revert if necessary
Move keypress listeners to move global SWT event

Key-presses were previously listened to via the Swt::Shell.add_key_listener.
This worked ok, but had the drawback that if a button had gotten the default
focus (depending on your OS conventions), then keypresses would get eaten as
they were sent to the button instead of the shell.

This commit changes to use the ::Swt.display.add_filter mechanism, which is a
more global way of listening to keypresses before they get sent to the various
SWT widgets on the screen. This means that we see the keypress in the filter
before the button choses to eat it.

Also removed some of the unnecessary intermediate machinery around the key
events vs listeners.
Only handle keypresses from our shell
Remove unused Shoes::Swt::KeyEvent class
Filtering for keypresses to forward

Certain SWT controls--buttons, text, combos--have handling for some keypresses
on their own already, and in Shoes 3 wouldn't send those keys along to key
press handlers.

Since the SWT display filters we're using see all the events, to maintain
consistency with the old behavior, we try to manually filter out the events
that shouldn't get through.
Use hide/show on buttons, not displace

Buttons don't properly support calling style with displacement values yet, but
the displacements were only to move things on/off screen, so just hide/show
instead.
Trigger redrawing on game of life

The existing game of life code wasn't properly triggering element redraws when
the style of a cell changed states. This meant that clicking run would go, but
only show you the results when you forced a redraw by other means (i.e.
resizing the window).

This commit adds a redrawing trigger for the common `style` call and updates
the sample to be more cautious about style-setting to avoid masses of updates
all at once.
Tests for ignoring keypress events
Merge pull request #646 from shoes/global_keypress

Move keypress listeners to a SWT event fixes #384