Calculate offset for a cursor based on an Area and a Cursor.

- Simplify Area by using attributes rather than arguments.
- Remove unused exceptions and methods.
- Extract methods and reduce complexity.
- Rename #indexed_(x|y) to #(x|y)_indices.
Update Cursors;

- Use interface top and left for default starting coordinates for the cursor when adding.
- Rename #cursor method to #build.
- Update documentation.
Move and reorder methods.
Remove (x|y)_offset from Cursors.
Memoize call.
Make #visible? public.
Continued development.
Minor Cursor refactoring.

- Move #state to public, fix tests.
- Discourage direct updating of the Cursor attributes.
- Simplify after removing #update method.
Add more documentation, also;
- Add a test for #use.
- Remove redundant documentation.
- Add todos.
Reposition cursor if outside the interface's current geometry.
More protective with respects to negative numbers.
Add Offsets repository and Offset class;

The Offsets repository stores the offset values (y, x) for the content of each interface by name.
Simplify Cursor app;

Let's get one interface with cursor working correctly before dealing with more.
Reorder methods, group like with like;

Also, alter (x|y)_range to include (x|y) and (x|y)_max.
Add ContentArea class;

Responsible for providing the size of the content for a given interface.
Access the interface geometry directly without Forwardable, also;

- Remove movement methods from Cursor.
Add VisibleArea class.
Add Move class.
Scrolling stuff. Still not right.