by keyword sets up a "delegate": an object that will serve as an intermediary
for your property.
by lazy allows you to declare the contents of a
val via a lambda expression.
When the property is first read, the lambda expression is evaluated and its
result is used as the initial property value.