Visit Scheduler

@dannyroberts @czue @millerdev - getting close to being done with this, feel free to start reviewing.

https://confluence.dimagi.com/display/ccinternal/Scheduler+Module?focusedCommentId=27365721&#comment-27365721

QA ticket: http://manage.dimagi.com/default.asp?125997

## Module View
![image](https://cloud.githubusercontent.com/assets/249606/3601314/48aacbee-0d00-11e4-9f08-1856c6731bda.png)

## Module view with error
![image](https://cloud.githubusercontent.com/assets/249606/3601294/16496dc2-0d00-11e4-82c7-8edb4a5c31d5.png)

## Form view
![image](https://cloud.githubusercontent.com/assets/249606/3601327/61701954-0d00-11e4-8cde-4c122bf004e3.png)

## Form view alternate
![image](https://cloud.githubusercontent.com/assets/249606/3601333/74159e9e-0d00-11e4-95ff-95d59c41d2ba.png)


Just thought of this, but this kind of expression building is actually a little dangerous.

```
foo.or_(bar).and_(baz)
```
actually becomes
```
foo or bar and baz
```
instead of
```
(foo or bar) and baz
```

Classic roll-your-own-expression-builder bug :).

I propose the following solution:
```
def expr(self, template, args):
    return XPath(template.format(map(lambda x: x.paren(), args)), compound=True)

def paren(self):
    return unicode(self) if not self.compound else u'({})'.format(self)

def __init__(self, string, compound=False):
    self.compound = compound
    ...
```
and then
```
    @staticmethod
    def and_(*args):
        return XPath.expr(u' and '.join('{}' * len(args)), args)
```
etc. This isn't bulletproof (the writer of these functions still needs to think about it) but it goes a long way towards fixing the problem.