Cleanup Variable code

Put common code into methods, making it easier to add more variable types.

Signed-off-by: Esben Haabendal <esben@haabendal.dk>
Redefine Variable __str__ API

Instead of giving a human readable representation of the get() value, just
return a representation of the class name and variable name (if set).

Using str() on Variable instances will yield values like:
    String(FOO)
    String()
    Int(I)

Signed-off-by: Esben Haabendal <esben@haabendal.dk>
A few extra unittests

Signed-off-by: Esben Haabendal <esben@haabendal.dk>
Add List variable support

In recipe context, you can do stuff like:

    LIST = ['foo', 'bar', 'bad stuff']
    LIST.remove('bad stuff')
    LIST.remove_if(BAR, 'bar')
    LIST.remove_if(FOO, 'foo')
    LIST.sort()
    OTHER = List(LIST)
    OTHER.extend(['hello', 'world'])
    BAR = True
    OTHER.prepend('before')
    OTHER.append('after')

Signed-off-by: Esben Haabendal <esben@haabendal.dk>
tests: Add test recipe for list parsing

Signed-off-by: Esben Haabendal <esben@haabendal.dk>