layer : add move ctor
modify add_layer to work with both move and copy semantics
use math functions from std::
fixed returning reference to temp object
TODO: change signiture to return boost::optional<std::string const&> and fix crufty logic